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

推荐答案

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

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

引用POSIX标准:

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

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

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

C++相关问答推荐

球体—立方体重叠:无、部分或全部?

为什么GCC C23中的关键字FALSE不是整数常量表达式?

错误:包含文件时类型名称未知

为什么memcpy进入缓冲区和指向缓冲区的指针工作相同?

&;(str[i])和(&;str)[i]有什么区别?

在WSL关闭/重新启动后,是什么原因导致共享对象依赖关系发生更改?

如何使用C++在控制台中以彩色打印被阻止的客户端

是否定义了此函数的行为?

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

具有正确标头的C struct 定义问题

C23标准是否向后兼容?

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

RISC-V GCC编译器错误编译ASM代码

即使客户端不发送数据,也会发生UNIX套接字读取

在同一范围内对具有相同类型的变量执行的相同操作在同一C代码中花费的时间不同

为什么程序在打印每个数字之前要等待所有输入?

使用fread()函数读取txt文件

为什么 C 字符串并不总是等同于字符数组?

当 a 是代码块时使用逗号运算符 (a, b)

inline 关键字导致 Clion 中的链接器错误