给定Linux进程的PID,我想从C程序判断该进程是否仍在运行.

推荐答案

发出以0为信号的kill(2)系统调用.如果调用成功,则表示存在具有此PID的进程.

如果调用失败,并且errno设置为ESRCH,则不存在具有这样PID的进程.

引用POSIX标准:

如果sig为0(零信号),则会执行错误判断,但不会执行

请注意,您不能免受竞争条件的影响:可能目标进程已经退出,同时另一个具有相同PID的进程已经启动.或者,流程在您判断之后可能会很快退出,您可以根据过时的信息做出决定.

仅当给定的PID为子进程(当前进程为fork‘)时,您才能将waitpid(2)WNOHANG选项一起使用,或try 捕获SIGCHLD个信号.它们不受竞争条件的影响,但只与子进程相关.

C++相关问答推荐

C中的外部/全局变量

如何获得 C 函数的基本编译二进制代码?

旋转位图并将浮点格式的结果坐标转换回像素数组的整数 x,y 值

使用 .* 宽度说明符调用 sprintf 时出现奇怪的警告

在链表中动态存储数据的问题

fork() - 多次调用子代码(相同的 PID)

浮点文字中有效十进制数字的最小数量是多少,以尽可能正确地表示该值?

如何在c中的图中标记已访问过的顶点

C:表示不带浮点的分数

套接字编程中shutdown()函数中SHUT_RDWR的用途

union无法解码字节数组

C 或 C++ 是否保证数组 < 数组 + SIZE?

C语言中i++和(i)++的区别

if-else 块中的“if (0)”块的目的是什么?

将输出重定向到文件时 printf() 和 system() 的结果顺序错误

为什么我在使用 rand() 时会得到这种特殊的 colored颜色 模式?

关于 C 中的数组初始化的困惑

在 C 中无法返回数组实际上意味着什么?

将双精度数分配给 C 中的 int 变量的非直观结果

如何使用 C 获取 Linux 中的 CPU 数量?