如何解决检查进程是否仍然存在
寻找有关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,而是依赖于抽象句柄(学究的观察者可能会指出,这些句柄可以双射地映射到数值,但通常它们不是“单纯的”计数器)。在这种环境下,手柄将不会被“回收”,并且可以在无需担心比赛条件的情况下使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。