posix - 检查进程是否仍然存在
问题描述
寻找关于 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,而是依赖于抽象句柄(迂腐的观察者可能会指出,这些句柄可能会双射映射到数值,但通常它们不是“纯粹的”计数器)。在这种环境中,句柄不会被“回收”,并且可以在不考虑竞争条件的情况下使用。
推荐阅读
- python - Redshift 函数错误 - 没有名为 boto3 的模块
- git - 如何在不丢失 git 历史记录的情况下修复 git 损坏的索引?
- javascript - 使用 html/javascript 添加未来日期时间的提醒
- spring - 在 spring 配置服务器中,rabbitmq 登录被拒绝
- android-jetpack - 尝试在 Jetpack Compose 中使用 PNG 时出现 Android IllegalArgumentException
- python - 在android termux中出现错误时重新启动运行python Scrip
- python - 如何使用 allure 生成屏幕截图 - 在 python 中表现
- amcharts - amcharts - 如何更改间隙连接的线型
- python - 使用多线程的 Python 脚本会造成内存泄漏
- kotlin - 字符串索引超出范围:12 (Kotlin)