bash – 通过ssh获取以nohup启动的进程的PID
我想通过ssh在远程机器上使用nohup启动进程.问题是如何使用nohup启动进程的PID,因此“进程实际上正在做某事”,而不是某些外壳实例等.另外,我想将stdout和stderr存储在文件中,但这不是问题所在……
在本地,它完美无缺地使用 nohup sleep 30 > out 2> err < /dev/null & echo $! 它回应了我命令“sleep 30”的确切PID,我也可以看到使用“top”或“ps aux | grep sleep”. 但我通过ssh远程执行此操作时遇到问题.我试过类似的东西 ssh remote_machine 'nohup bash -c "( ( sleep 30 ) & )" > out 2> err < /dev/null' 但我无法弄清楚在哪里放置“echo $!”以便它显示在我的本地shell中.它总是向我显示错误的PID,例如“bash”实例之一等. 有人知道如何解决这个问题吗? 编辑: ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!' 但问题是,如果你用产生输出的东西代替“sleep 30”,比如“echo Hello World!”,那么输出不会在文件“out”中结束,既不在本地也不在远程.有谁知道为什么? 编辑2:我的错!另一台设备上没有剩余空间,这就是为什么文件“out”和“err”保持空白! 所以这是有效的.另外,如果想要连续调用多个命令,用分号(;)分隔,则仍然可以使用“bash -c”,如下所示: ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < /dev/null & echo $!' 然后它在本地打印出“bash -c”的PID,这很好. (无法获得“最内层”或“忙碌”过程的PID,因为每个程序本身都可以产生新的子过程,没有办法找出…)
我尝试了以下(本地机器是Debian;远程机器是CentOS),它的工作方式与我认为你期望的完全相同:
~# ssh someone@somewhere 'nohup sleep 30 > out 2> err < /dev/null & echo $!' someone@somewhere's password: 14193 ~# 在远程机器上,我做了ps -e,看到了这一行: 14193 ? 00:00:00 sleep 所以,很明显,在我的本地机器上,输出是在远程机器上执行的“睡眠”PID. 为什么在通过SSH隧道发送时将bash添加到命令中? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |