获取进程的PID通过ssh开始的nohup(Get the PID of a process sta

2019-08-01 00:49发布

我想开始通过ssh使用nohup的远程计算机上的进程。 问题是如何得到的PID进程开始nohup的,所以“过程,实际上做的事情”,而不是一些外壳实例等。 另外,我想存储在文件输出和错误,但这里说的不是问题...

在当地,它完美的作品使用

nohup sleep 30 > out 2> err < /dev/null & echo $!

它呼应了我的命令“休眠30”,这也是我可以看到使用“顶”或“的ps aux | grep的睡眠”的具体PID。

但我无法远程执行它通过ssh。 我想是这样

ssh remote_machine 'nohup bash -c "( ( sleep 30 ) & )" > out 2> err < /dev/null'

但我想不通的地方放置“回声$!” 因此,它显示在我的本地壳。 它总是显示我的意思的PID,例如“打击”实例等一

有人偷一个想法如何解决这个问题?

编辑:好的,可能不会在这里需要“的bash -c” 像Lotharyx指出,我得到正确的PID就好使用

ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!'

但随后的问题是,如果你代替“休眠30”的东西,产生输出,也就是说,“呼应的Hello World!”,即输出不会文件“出”,在结束了,无论是在本地还是远程端。 任何人有一个想法,为什么?

EDIT2:我的错! 只是有没有留下其他设备上的空间,这就是为什么文件“out”和“犯错”一直都是空的!

因此,这是工作。 此外,如果一个要调用的多个命令中的行,用分号(;)隔开,一个仍然可以使用“的bash -c”,如下所示:

ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < /dev/null & echo $!'

然后它打印出的“庆典-c”的PID在本地端,这只是罚款。 (这是不可能得到的“最里面的”或“忙”进程的PID,因为每个程序本身可以产生新的子过程,没有办法,找出...)

Answer 1:

我尝试以下(本地计算机是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你的指挥?



文章来源: Get the PID of a process started with nohup via ssh
标签: bash ssh pid nohup