如何在shell中启动一个作业,即使启动它的shell终止也会持续存在

yan*_*uli 3 linux shell background-process

我如何在Linux shell中工作,以便即使启动它的shell终止,这个工作仍然会持续存在?

更具体地说,我试图在一个进程上运行strace.如果我在终端上运行,它会完美运行.但是,我想在一个远程shell中执行它,它将在所有命令执行后立即停止."strace -p pid &"没有任何效果,因为当shell停止时,后台作业也会被杀死.

我该怎么办?

nohup似乎是我要找的东西.但是,ssh user@remote_machine script_name似乎也没有任何影响.在我的脚本中"nohup strace -p pid"

非常感谢!

Sat*_*ish 6

Nohup并且Screen即使会话断开连接或用户注销,也可用于运行命令.我同时使用它们,但"屏幕"更好.

nohup ./<script_name> &
Run Code Online (Sandbox Code Playgroud)

如何使用屏幕?

创建任务:

$ screen -S task
Run Code Online (Sandbox Code Playgroud)

在任务窗口中执行命令,如果任务未完成,请使用

$ Ctrl+a+d
to save the task. It will show the following info:
[detached]
Run Code Online (Sandbox Code Playgroud)

如果您的任务已完成,请使用"退出"退出屏幕:

    $ exit

[screen is terminating]
Run Code Online (Sandbox Code Playgroud)

您可以screen -ls用来查找任何屏幕信息:

$ screen -ls
There is a screen on:
10000.task (Detached)
Run Code Online (Sandbox Code Playgroud)

使用"screen -r"恢复任务:

$ screen -r 10000
Run Code Online (Sandbox Code Playgroud)