【问题标题】:Linux - when is /proc/PID created?Linux - /proc/PID 何时创建?
【发布时间】:2015-07-16 19:53:12
【问题描述】:

我正在编写一个 Bash 脚本来监视进程并检测它何时崩溃。为此,我正在监视 /proc 目录;

start_my_process;
my_process_id=$!;
until [[ ! -d "/proc/$my_process_pid" ]]; do
   # alert the process is dead and restart it...
done

我能否保证在 Bash 完成执行启动进程的命令之前创建 /proc/ 中的进程条目?或者是否有可能在执行我上面的检查时,可能还没有创建 start_my_process 的条目?

编辑: 最后,我实际上反对自定义解决方案并选择了 monit,它是一个出色的看门狗工具。

【问题讨论】:

  • 您的问题实际上是“我如何检测后台进程是否仍然存在?”
  • 可能。以上就是我选择这样做的方式。我想尽快检测进程是否已死。
  • @Boon 有很多常见的模式可以做到这一点,例如 monit,你试过了吗?
  • @Cyrus - 我到底为什么要这样做?
  • 如果您以结尾的 & 开始您的流程,请尝试以下操作:while true; do start_my_process &; wait; done

标签: linux bash proc


【解决方案1】:

/proc/<pid> 永远不会被创建。这不是一个真正的目录。

/proc 是一个虚拟文件系统。当您打开其中一个“文件”并从其输出流中读取时,内核正在提供数据。由于内核还负责管理进程<pid>,因此只要内核跟踪它,内核就会告诉您/proc/<pid> 目录存在。

由于 bash 在进程存在之前无法设置 $!,因此在此之后,您绝对可以安全地检查进程在 /proc 下的虚拟目录。

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 1970-01-01
    • 2015-08-24
    • 2010-11-26
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2014-03-15
    • 2020-12-01
    相关资源
    最近更新 更多