检查具有特定pid的进程是否存在和活动(不是僵尸(的方法是什么? 我正在使用带有gcc的Ubuntu Linux。
你应该明白,当你决定用这个过程做某事时,它可能早已不复存在(谷歌TOCTOU(。
无论如何,POSIX的方式是拨打kill (0, pid)
并检查errno
。ESRCH
的意思是"没有这样的过程",EPERM
是"过程存在,但你不能发出信号"。
特定于Linux的方法是读取/proc
目录。那里的条目对应于PID(也有一些条目不是数字,您可以忽略它们(。不过,并非所有 Linux 系统都使用/proc
。
如果您正在使用SELINUX,则可能有些过程您甚至不被允许知道,但是由于您无法对此做太多事情,因此甚至不必担心。