查找已由另一台服务器远程触发的进程

时间:2015-04-01 18:23:35

标签: linux bash shell unix

我有一个shell脚本,可以触发远程服务器上的某些进程。那么请您告诉我在这个远程服务器上如何找到客户端上的脚本启动的这个过程的实例。

当我在远程服务器上执行ps -aef时,我得到的过程如下:

csols 13381 13377 0 11:00:23 a t 0:00 ksh -c export LD_LIBRARY_PATH=/tool/yks/lib ; /tool/yks/bin/yksrt ' csols 13428 13381 0 11:00:23 a t 0:00/tool/yks/bin/yksrt Input down pdf.

操作系统:sunos版本5.10 远程服务器的脚本执行过程在bash上运行。

tty终端正在变成“t”。这是否表示该进程已通过ssh远程启动。如果没有,是否有其他方法。

1 个答案:

答案 0 :(得分:0)

在您的情况下,一种方法是从客户端脚本中获取PID:

localMachine$  ssh sshRemoteUser@remoteMachine 'sleep 10 & echo $!'
30741

remoteMachine$ ps aux | grep '30741'
sshRemoteUser  30741  0.0  0.0   5600   580 ?        S    14:46   0:00 sleep 10

在这种情况下,请注意命令是已分离,因此您可能必须等待远程命令完成(而您的脚本可能已经在ssh sshRemoteUser @ remoteMachine中自然阻止了“yourCommand”前)

如果您已经知道命令行并且命令行未在系统中广泛使用,则另一种简单的方法是使用命令行的“相关部分”的简单grep命令:

localMachine$ ssh sshRemoteUser@remoteMachine "sleep 10"

remoteMachine$ ps aux | grep 'sleep'

另外,如果只是为了快速查看,一个简单的“估计”就是假定通过脚本创建的SSH进程将立即跟随命令的进程(在我的情况下为“sleep 10”) 。请注意,这是一个估计,因为调度程序很可能可能在此期间创建另一个进程。 就我而言,我有两个终端(bash)+虚拟睡眠,例如:

localMachine$ ssh sshRemoteUser@remoteMachine "sleep 10"

remoteMachine$ ps aux | grep -A1 "sshd: sshRemoteUser@"
sshRemoteUser 2987  0.0  0.0  72516  3140 ?        S    Apr01   0:52 sshd: sshRemoteUser@pts/1
sshRemoteUser   2997  0.0  0.0  23096  6040 pts/1    Ss   Apr01   0:00 -bash
--
sshRemoteUser   6291  0.0  0.0  73392  3300 ?        S    Mar31   1:35 sshd: sshRemoteUser@pts/0
sshRemoteUser   6292  0.0  0.0  23148  6092 pts/0    Ss   Mar31   0:01 -bash
--
sshRemoteUser  14875  0.0  0.0  71276  1616 ?        S    14:33   0:00 sshd: sshRemoteUser@notty
sshRemoteUser  14876  0.2  0.0   5600   584 ?        Ss   14:33   0:00 sleep 10