检查进程是否仍然存在

问题描述

寻找有关getpgid()函数(C语言)的优缺点 另外寻找关于stat()函数的利弊 例如:

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

另外,寻找关于kill()函数的利弊 例如:

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

每种方法在测试过程是否存在方面的利弊

解决方法

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

通过重用的数字ID标识进程的API容易出现争用情况,即,在进程终止与对ID的查询之间,可能已经启动了具有相同ID的新进程。当然,在某些情况下会阻止这种情况的发生。例如,在POSIX中,子进程即将死去,而父进程wait死去,则PID会像僵尸进程一样徘徊。但是,对于一种可靠的方法来标识wait语义保护范围之外的进程,已经引入了进程“文件”描述符(请参见pidfd_open)。

其他操作系统不使用数字ID,而是依赖于抽象句柄(学究的观察者可能会指出,这些句柄可以双射地映射到数值,但通常它们不是“单纯的”计数器)。在这种环境下,手柄将不会被“回收”,并且可以在无需担心比赛条件的情况下使用。