首页 > 解决方案 > 检查进程是否仍然存在

问题描述

寻找关于 getpgid() 函数(c 语言)的利弊,此外寻找关于 stat() 函数的利弊,例如:

if (stat("/proc/172", &sts) == -1

此外,寻找有关 kill() 功能的利弊,例如:

 kill(atoi(argv[1]),0);

关于测试流程是否存在,每种方法的优缺点是什么

标签: posix

解决方案


进程不是 C 语言规范的一部分。实际上,它们是严格的操作系统功能。

通过重复使用的数字 ID 标识进程的 API 容易出现竞争条件,即在进程终止和对 ID 的查询之间,可能已经启动了具有相同 ID 的新进程。当然,在某些情况下可以防止这种情况发生。例如,在 POSIX 中,在子进程死亡和父进程之间wait,PID 将作为僵尸进程持续存在。然而,为了识别在wait语义保护之外的进程,引入了一种健壮的方法,进程“文件”描述符已被引入(请参阅 参考资料pidfd_open)。

其他操作系统不使用数字 ID,而是依赖于抽象句柄(迂腐的观察者可能会指出,这些句柄可能会双射映射到数值,但通常它们不是“纯粹的”计数器)。在这种环境中,句柄不会被“回收”,并且可以在不考虑竞争条件的情况下使用。


推荐阅读