Linux Kill()错误出乎意料
Linux kill() error unexpected
kill(pid,0)似乎无法正确设置错误代码...
错误
如果:
,kill()函数将失败einval sig参数的值是无效或不支持的 信号号。
eperm该过程无权发送 向任何接收过程发出信号。
ESRCH没有过程或过程组可以 找到与PID指定的相对应的。下列 部分内容丰富。 1
它正在返回enoent(没有这样的文件或目录),然后有时它返回EINTR(系统调用中断)...
这是我在做的:
kill(g_StatusInstance[i].pid, SIGTERM) == -1 && log_fatal_syscall("kill-sigterm");
kill(g_StatusInstance[i].pid, 0);
log_info_console( "Checking process for errors: %sn", strerror(errno));
if(errno != ENOENT)
{
kill(g_StatusInstance[i].pid, SIGKILL) == -1 && log_fatal_syscall("kill-sigkill");
}
我做错了什么?
Kill(pid, 0)
似乎无法正确设置错误代码... 它正在返回恩典... eintr这是我在做的:
... kill(g_StatusInstance[i].pid, 0); log_info_console( "Checking process for errors: %sn", strerror(errno));
我做错了吗?
是。您没有检查kill()
系统调用的返回值。kill()
在成功的情况下不会将ERRNO设置为任何特定值。
尝试以下操作:
if(kill(g_StatusInstance[i].pid, 0) == -1) {
log_info_console( "Checking process for errors: %sn", strerror(errno));
} else {
log_info_console( "kill returned 0, process still aliven" );
}
更一般地,您应该检查每个系统呼叫或库呼叫的返回值,除非声明返回void
。
基于讨论,您的问题可能是"为什么我的 kill()
不产生我期望的效果?"
为了理解为什么会发生这种情况,您应该首先在kill()
的目标上尝试strace
。通过pid
将其连接到您现有的过程中,或根据strace
调用。strace
将显示对信号面膜的修改,并指示信号何时到达。如果您的信号到达,则应调试由kill()
目标的过程,并尝试了解预期已安装/默认信号处理程序。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- Linux Kill()错误出乎意料