退出在主机上运行的shell脚本

时间:2016-07-29 07:06:17

标签: linux bash perl shell background-process

这是我从机器1到机器2(远程)启动的脚本代码

 #!/bin/bash
 nohup perl server.pl &
 echo "script ends"
 exit

文件server.pl在 while(1)类型的循环中运行,直接监听套接字。

我现在面临的问题是:因为我在调用此脚本后远程启动此shell脚本,我还要在启动此shell脚本的文件中完成其他工作。 例如:

#this script launches the shell script 
$cmd = "sabkuch.sh";
$ssh->system($cmd);#using Openssh perl package to remotely run commands
#do some other processing
print "Welcome to USA\n";

运行上面的代码时,我无法打印语句,直到我提供 Ctrl-C

如果我在机器2上启动这个shell脚本(没有从机器1远程启动它)我得到了预期的结果,我不知道我哪里出错了,可能是什么问题?

PS:我已经评论了shell脚本中的所有打印语句(为了避免一些stdout问题,尽管& 再次将进程转移到fg)

1 个答案:

答案 0 :(得分:1)

这在Perl或SSH中不是问题,而是你使用nohup的方式。如果将其称为

,脚本将挂起相同的内容
ssh host2 ./sabkuch.sh

nohup只有真正分离才能让调用ssh进程终止,如果你像这样重定向stdout / stderr:

nohup perl server.pl >/dev/null 2>&1 &