确定进程是否正在运行?

Bla*_*ary 1 c linux operating-system process

有没有一种简单的方法来确定某个进程是否正在运行?我需要知道我的程序的实例是否在后台运行,如果不是fork并创建后台进程.

Mar*_*rkR 5

通常这种做法的无竞赛方式是:

  • 打开一个锁文件/ pid文件进行写入(但不要截断)
  • 尝试对其进行独占锁定(使用fcntl或flock)而不会阻塞
  • 如果使用EAGAIN失败,则其他进程已在运行.
  • 现在,守护程序应继承文件描述符,并在其生命周期内保持打开状态

简单地存储PID的优点是,如果有人重用PID,你就不会得到误报.

将pid存储在文件中的最大问题是系统启动守护程序使用的低编号pid可以在后续重新引导时由不同的守护程序重用.我看到过这种情况.