从 nohup 命令检索进程信息

从 nohup 命令检索进程信息

我使用nohup以下命令运行 shell 脚本:

nohup ./run.sh &

我的问题是:退出终端并稍后返回后,如果该过程已完成或仍在运行,我该如何检索有关该过程的信息?

答案1

通常,您可以检查 的输出ps x。 要么有,run.sh要么没有。 如果有,则可能是您要查找的进程,也可能是其他进程run.sh。 可能需要进一步调查。

不过还有一个技巧。Notenohup会打印如下消息:

 nohup: ignoring input and appending output to /home/alli/nohup.out

现在调用:

lsof /home/alli/nohup.out

如果您的run.sh调用nohup仍在运行,它应该出现在输出中lsof(两次,因为nohup将文件描述符1和重定向2nohup.out)。如果您nohup多次使用,lsof应该返回多个进程。如果您nohup多次使用同一个可执行文件,您可能需要检查/proc/$pid/例子) 来区分它们。

我会用tmux首先。事实上我每天都在用它。

答案2

您可以在启动进程后立即使用以下命令将ped 进程的值存储nohup在文件中:$!

nohup the_process &

然后当你回来时读取 PID 并检查进程是否正在运行。如果是,检查它是否是你想要的那种进程。(PID 可能已被重新分配给另一个进程。)

如果它不会破坏进程的运行,您还可以向进程传递一个虚假参数,当您读取输出时,该参数将作为提示ps。例如:

$ cat p.bash 
#!/bin/bash
sleep 10
$ nohup ./p.bash some_id_hint &
[1] 14139
nohup: ignoring input and appending output to 'nohup.out'
$ echo $!
14139
$ ps 14139
  PID TTY      STAT   TIME COMMAND
14139 pts/1    S      0:00 /bin/bash ./p.bash some_id_hint

相关内容