使用&运行nohup
在命令行上,它返回进程ID,
虽然我在反引号中的perl脚本中运行相同的命令并尝试读取输出但不返回任何输出。
有人可以指导吗?
nohup rm -rf ragh &
[1] 10029
答案 0 :(得分:2)
在终端中启动后台进程时,shell会打印作业号和PID。 nohup
无关紧要。如果您不从终端启动作业(即在shell上使用Perl中的反引号,或者使用普通子shell),则不会显示该信息。无论如何,你为什么需要它?有关详细信息,请参阅perlipc - Perl interprocess communication。
答案 1 :(得分:2)
如果您需要后台作业的进程ID,请使用$!
变量,例如:
nohup start_long_running_job &
echo $! > jobid.txt
然后如果你需要杀死这份工作:
kill $(cat jobid.txt)
无论有没有nohup
,它同样适用。
答案 2 :(得分:0)
nohup表示您生成一个新进程并在该上下文中执行该脚本。 如果你的命令需要比你的起始脚本更长的时间,它将在你的shell关闭后继续存在。如果您需要输出,则应将其传送到其他地方
nohup rm -rf ragh > log.txt &
答案 3 :(得分:0)
choroba在未显示PID时正确说明(“如果您没有从终端启动作业”)。
Richard RP正确地说可以使用$!
。但是为了在反引号中运行Perl脚本,另外我们需要关闭命令的标准输出,否则只有在进程完成后才会返回反引号调用,因为perl会等待输出的EOF。
$pid = `nohup rm -rf ragh >&-& echo \$!`
在rm
中获取$pid
的PID。