Linux 如何通过pid识别程序

Linux 如何通过pid识别程序,linux,pid,Linux,Pid,我的标题不仅仅是明确的,所以请随意更改(不知道如何命名) 我使用一个php脚本来检查pid列表是否正在运行,我的问题是pid识别是不够的,其他一些程序可以在我结束后获取pid编号 那么,除了pid是我需要检查的好的pid,而不是另一个pid之外,我还能做些什么来识别它呢 我认为散列/proc//cmdline,但即使这样也不是100%安全的(另一个程序可以是相同的软件和相同的参数(这很少见,但可能) 如果需要一个例子: 我运行了几个wget实例 其中一个的PID编号为8426 几次之后 我检查P

我的标题不仅仅是明确的,所以请随意更改(不知道如何命名)

我使用一个php脚本来检查pid列表是否正在运行,我的问题是pid识别是不够的,其他一些程序可以在我结束后获取pid编号

那么,除了pid是我需要检查的好的pid,而不是另一个pid之外,我还能做些什么来识别它呢

我认为散列
/proc//cmdline
,但即使这样也不是100%安全的(另一个程序可以是相同的软件和相同的参数(这很少见,但可能)

如果需要一个例子:

我运行了几个wget实例

其中一个的PID编号为8426

几次之后

我检查PID 8426是否正在运行,我的php脚本会做出反应,不会检查下载的文件,但事实是wget的PID 8426已经结束,这是另一个运行PID 8426的程序


如果新程序运行很长时间(例如:服务),我可以等待很长时间,让我的php脚本检查下载的文件。

您是否尝试过采用面向对象的范例,在这种范例中,您可以将特定的PID编号封装到其特定的对象(即特定的程序)中?要实现这一点,您需要创建一个类(假设您给它一个任意名称“SOURCE”),从中可以获取这些程序作为属于该类的对象。这样做将封装任何信息(例如,PID),将该特定程序的方法单独包含到该程序中,因此,提供了一种比哈希更安全的方法。类似的方法可以在Python的面向对象编程范例中找到。

您可以读取
/proc//exe
指向的二进制文件。以下概念在shell中完成,但可能可以o在任何语言(包括php)中:

$ readlink "/proc/$$/exe"
/bin/bash

根本没有可靠的方法通过PID来识别程序。如果您正在启动进程,为什么不等待程序完成?您的编程语言是什么?通过@CareyGregory扩展注释,原因是系统可能会报告任何进程的多个PID,即正在运行和不运行的PID。@Jayan我不能,进程可以持续几分钟到几个小时,因此无法使php脚本同步(因为这会冻结脚本).@DavidC.Rankin这意味着什么。即使我的pid在他们的生命中也会改变?如果它是同一个可执行文件呢?我提到hashing cmdline是因为它比exe更准确,但总有一个风险pid是一回事,但它没有说明如何将它与以后使用相同pid的另一个可执行文件隔离。使用对象存储它或任何疗法method@eephyne分配一个类会将一个对象中的pid与另一个对象的相同pid屏蔽。因此,即使pid相同,可执行文件也会使用不同的对象。换句话说,一旦可执行文件对一个pid(对象a)进行操作,它就不会对同一个数字pid(属于对象B)进行操作因为可执行文件会识别这两个对象(即使对象中的pid相同)。这里提出了一个类似的问题:我真的不知道如何适应我的使用。每次执行php脚本时,它都会扫描一个文件以获得所有PID,因此他必须检查,即使我当时创建了一个对象,它也不符合你的意思。下面的网站解释了如何创建一个实例(对象)你能创建一个用户定义的类吗?