当前位置: 首页 > 面试题库 >

给定其pid,检查进程是否存在

吕皓
2023-03-14
问题内容

给定Linux进程的pid,我想从C程序检查该进程是否仍在运行。


问题答案:

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

如果调用失败并errno设置为ESRCH,则不存在具有此类pid的进程。

引用POSIX标准:

如果sig为0(空信号),则执行错误检查,但实际上未发送任何信号。空信号可用于检查pid的有效性。

请注意,您在竞争条件下并不安全:目标进程可能已退出,并且与此同时已启动了另一个具有相同pid的进程。否则,检查后该过程可能很快退出,您可以根据过时的信息做出决定。

仅当给定的pid是子进程(fork从当前进程开始)时,才可以使用waitpid(2)WNOHANG选项,或尝试捕获SIGCHLD信号。这些在种族条件下是安全的,但仅与子进程有关。



 类似资料:
  • 问题内容: 有没有办法检查pid是否对应于有效进程?我从其他来源获得pid ,我需要检查计算机上是否不存在具有该pid的进程。 我需要它在Unix和Windows中可用。我也在检查PID是否未使用。 问题答案: 如果pid没有运行,则向pid发送信号0将引发OSError异常,否则不执行任何操作。

  • 问题内容: 如果我具有流程的PID,则os.FindProcess是否足以测试该流程的存在?我的意思是,如果返回,我是否可以认为它已终止(或被杀死)? 编辑: 我刚刚写了一个包装函数(旧式bash流程测试)。这可以正常工作,但是如果有其他解决方案(使用go库完成),我仍然很高兴。 问题答案: 这是查看进程是否处于活动状态的传统的Unix方式-向其发送0信号(就像您对bash示例所做的一样)。 来自

  • 问题内容: 我想在更新密钥值之前测试字典中是否存在密钥。我写了以下代码: 我认为这不是完成此任务的最佳方法。有没有更好的方法来测试字典中的键? 问题答案: 是测试密钥是否存在的预期方法。 如果你想使用默认值,可以随时使用dict.get(): 如果你想始终确保任何键的默认值,则可以重复使用,也可以从模块中使用它,如下所示: 但总的来说,关键字是最好的方法。

  • 问题内容: Postgres 8.4及更高版本的数据库在public架构中包含公用表,在架构中包含公司特定的表company。 company模式名称始终’company’以公司编号开头和结尾。 因此,可能会有类似以下的模式: 应用程序始终与单个公司一起使用。 的search_path相应指定在ODBC或连接Npgsql的字符串,如: 您如何检查指定表中是否存在给定表companyn? 例如: 应

  • Postgres 8.4和更高版本的数据库在架构中包含公共表,在架构中包含公司特定表。 架构名称始终以开头,以公司编号结尾。 因此可能存在如下架构: 应用程序总是与单个公司一起工作。 相应地在odbc或npgsql连接字符串中指定,如: 如果给定的表同时存在于和传递的模式中,则该函数应返回。 它应适用于Postgres8.4或更高版本。

  • 检查指定的参数字符串是否是16进制字符串。 调用: web3.utils.isHex(hex) 参数: hex - String|HEX: 要检查的字符串 返回值: Boolean:如果参数为16进制字符串则返回true,否则返回false 示例代码: web3.utils.isHex('0xc1912'); > true web3.utils.isHex(0xc1912); > true