我如何劳克工作在Linux外壳,这样即使其启动它终止外壳,作业将仍然存在?
更具体地讲,我想在一个进程中运行strace的。 如果我在终端做它运行完美。 不过,我想这样做在一个远程shell将尽快所有的命令已被执行停止。 "strace -p pid &"
因为当外壳停止,后台作业也就会被杀死没有任何效果。
我应该怎么办呢?
nohup
好像是我要找的东西。 然而, ssh user@remote_machine script_name
似乎没有任何效果也没有。 在脚本我有"nohup strace -p pid"
非常感谢!
Nohup
和Screen
可用于即使在会话被断开或用户退出运行命令。 我用他们两个,但“屏幕”是更好的。
nohup ./<script_name> &
如何使用屏幕?
创造一个任务:
$ screen -S task
在任务窗口中执行命令,如果你的任务没有完成,使用
$ Ctrl+a+d
to save the task. It will show the following info:
[detached]
如果你的任务已经完成,使用“退出”退出画面:
$ exit
[screen is terminating]
您可以使用screen -ls
找到任何屏幕信息:
$ screen -ls
There is a screen on:
10000.task (Detached)
使用“屏幕-r”恢复任务:
$ screen -r 10000
你可以使用“屏幕”! 用法:
screen [Enter]
enter your command
[Ctrl] + [A] + [D(Detach)]
你的任务继续运行。 如果你想回去给它只需键入:
screen -r
要么
screen -r -d (to detach old sessions)
另外其他的答案,你可能需要使用批处理(1)命令(或者远程通ssh
),例如像
batch << ENDBATCH
strace -p 1234 -o /tmp/trace.file
ENDBATCH
文章来源: How to launch a job in a shell which will persist even if the shell which launches it terminates