3

如何在 Linux shell 中启动作业,以便即使启动它的 shell 终止,该作业仍将持续存在?

更具体地说,我正在尝试在一个进程上运行 strace。如果我在终端中执行它,它会完美运行。但是,我想在远程 shell 中执行此操作,一旦所有命令执行完毕,该 shell 就会停止。"strace -p pid &"没有任何影响,因为当 shell 停止时,后台作业也会被杀死。

我该怎么做?

nohup似乎是我正在寻找的东西。但是,ssh user@remote_machine script_name似乎也没有任何效果。在我的脚本中"nohup strace -p pid"

非常感谢!

4

3 回答 3

6

NohupScreen即使会话断开或用户注销,也可用于运行命令。我都使用它们,但“屏幕”更好。

nohup ./<script_name> &

如何使用屏幕?

创建一个任务:

$ screen -S task

在任务窗口执行命令,如果你的任务没有完成,使用

$ Ctrl+a+d
to save the task. It will show the following info:
[detached]

如果您的任务已经完成,请使用“exit”退出屏幕:

    $ exit

[screen is terminating]

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

$ screen -ls
There is a screen on:
10000.task (Detached)

使用“screen -r”恢复任务:

$ screen -r 10000
于 2013-02-01T21:18:25.950 回答
2

你可以使用“屏幕”!用法:

screen [Enter]
enter your command
[Ctrl] + [A] + [D(Detach)]

您的任务继续运行。如果您想返回它,只需输入:

screen -r

或者

screen -r -d (to detach old sessions)
于 2013-02-01T21:19:47.457 回答
1

除了其他答案之外,您可能还想使用batch(1)命令(可能是远程 thru ssh),例如

  batch << ENDBATCH
    strace -p 1234 -o /tmp/trace.file
  ENDBATCH
于 2013-02-02T05:57:16.257 回答