我必须ssh到服务器运行一些需要很长时间才能完成的代码 . 所以我需要使用 nohup
命令 .
我使用nohup命令启动了多个进程,如下所示:
nohup julia test.jl > Output1.txt &
nohup julia test.jl > Output2.txt &
nohup julia test.jl > Output3.txt &
nohup julia test.jl > Output4.txt &
问题是我关闭了终端,当我打开另一个终端时,我无法使用 jobs -l
获取进程名称和ID .
我尝试使用 ps -p
,但它回答了我所有上述过程的相同答案 julia
.
我的问题是“如何指定哪个流程是哪个?”请注意,这些进程中只有输出文件名不同 .
和
“我怎么能在将来阻止这样的问题?”
谢谢你的时间和答案 .
2 回答
区分这些过程的一种方法是通过
stdout
重定向,并且使用ps
命令没有好办法 .如果安装了
pgrep
,则可以使用简单的for loop
来了解哪个pid
对应于哪个输出文件 . 像下面的东西,/proc/${pid}/fd/1
表示具有pid
的进程的stdout
. 这是一个符号链接,因此您需要使用readlink
来检查源 .输出:
另一种方法是使用
lsof -p $pid
,但我发现它比你想要实现的重一点,但输出会是相同的 .要查找此类进程的PID,可以使用
fuser
或
lsof
为了避免将来出现这种情况,请在服务器上使用GNU Screen(https://linode.com/docs/networking/ssh/using-gnu-screen-to-manage-persistent-terminal-sessions/) .