题 是否可以从其终端分离进程? (或者,“我应该使用屏幕!”)[重复]


可能重复:
我可以nohup /屏幕已经启动的进程吗? 

在Unix(特别是Linux)上,我在常规的ssh-> bash会话中开始工作。我想尽快离开工作,但我现在意识到这项工作需要几个小时。

如果我刚刚在屏幕上开始这项工作,我可以分开并回家。但我没有。

有没有办法断开作业与其ssh会话,所以我可以关闭我的电脑,(删除TCP连接和杀死ssh会话),然后让程序继续运行?

我不关心它的输出 - 事实上,我将stdout重定向到一个文件。我只是希望它能够完成。


116
2017-07-01 22:16






答案:


你可以按 ctrl-z 中断进程然后运行 bg 使它在后台运行。

您可以以这种方式显示所有进程的编号列表 jobs

然后你就可以跑了 disown %1 (更换 1 输出的进程号 jobs)从终端分离进程。

尽管名称如此,但在运行后,该过程仍归您所有 disown,它将与您启动它的终端分离。

这个答案有更多的信息


156
2017-07-01 22:26



尝试这个程序有多安全?任何陷阱? - ndemou


我相信你正在寻找的命令是“被拒绝”


17
2017-08-19 16:32





从你的bash shell中:

control+z

然后,继续在后台运行作业:

bg

之后,您可以输入 jobs  查看您的进程是否仍在运行。


8
2017-07-01 22:23



关闭我的贝壳会不会被杀死? - mike
不,不,如果你正在运行bash,至少不会。该作业将从您的ssh会话的PPID中分离,并仍然作为您的用户名在服务器上运行。 - Joe
上面的说明将导致进程在关闭shell时退出。您还需要运行'disown'命令/ builtin(这是在bash中),这将解除进程与shell的关联,并且不会在退出时将HUP信号发送到进程。 - Mark
在我的bash版本[3.2.25(1)-release(i686-redhat-linux-gnu)]中,我测试了这个过程,并且在断开连接之前不必拒绝该作业。子PID与父PID断开连接,并继续作为我的用户名运行而不会中断。我想是YMMV。 - Joe


使用时 reptyr 在屏幕内部,您可以将过程(或其输出)移动到屏幕中。


5
2018-05-16 14:07





使用
nohup命令&

是美丽的:
root @ index:〜#nohup / usr / bin / curl localhost / begemot.php&
[1] 894
root @ index:〜#nohup:忽略输入并将输出附加到`nohup.out'

并退出该终端,任务继续进行......

5
2018-05-24 09:23





使用crtl-Z然后bg或在运行命令时使用&在100%时不可靠。它在大多数情况下都可以工作,但在某些情况下可能无法正常工作(I / O使用,......)。
屏幕是一种可靠的解决方案


4
2017-07-01 22:34



注意retty(pasky.or.cz/~pasky/dev/retty)是一个工具,可以让您将在屏幕外运行的进程移动到屏幕中。如果忘记,将工作放在屏幕上会很有用。然后,您可以安全地分离屏幕,而不会有任何停止工作的风险。 - radius


我已经采取了设置 screen 我连接到我经常使用的主机时自动运行,以避免此问题。

http://tlug.dnho.net/?q=node/239 这是一种做法,尽管还有其他的变化。

当我在会话中意外断开连接时,已经保存了一两次,否则会忘记启动 screen 在我开始啰嗦之前。


4
2017-07-01 22:50





如果你正在使用bash,你可以怀疑控制-Z和背景与bg。

工作控制 (来自man bash)

 If the operating system on which bash is running supports job 
 control, bash contains facilities to use it.   Typing the  
 suspend  character  (typically ^Z, Control-Z) while a process 
 is running causes that process to be stopped and returns control 
 to bash.  Typing the delayed suspend character (typically ^Y, 
 Control-Y) causes the process  to  be stopped  when  it  
 attempts to read input from the terminal, and control to be 
 returned to bash.

帮助bg

bg: bg [job_spec ...]
    Place each JOB_SPEC in the background, as if it had been started with
    `&'.  If JOB_SPEC is not present, the shell's notion of the current
    job is used.

帮助工作

jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.

3
2017-07-01 22:23



当我关闭计算机,从而切断SSH会话并杀死shell时,它不会被杀死吗? - mike
等等,您是否在本地计算机上运行该命令并使用SSH进行某些输入/输出?或者这是在远程计算机上运行?如果该命令在远程计算机上运行,​​那么您应该能够对其进行后台处理并断开连接。 - Zoredache