可能的重复:我可以不对已启动的进程进行hup /筛选吗?




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

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

有什么方法可以将作业与其ssh会话断开连接,因此我可以关闭我的计算机,(断开TCP连接并终止ssh会话),但是程序是否继续运行?

我不在乎它的输出-实际上,我将stdout重定向到了一个文件。我只希望它运行完成。

#1 楼

您可以按ctrl-z中断该进程,然后运行bg以使其在后台运行。 >然后您可以运行jobs(将disown %1替换为1输出的进程号)以从终端分离进程。 ,它将与您启动它的终端分离。

此答案具有更多信息

评论


尝试此过程有多安全?有问题吗?

– ndemou
16年7月24日在13:53

放弃真的是小菜一碟,谢谢@大卫。

–fiorentinoing
19年1月20日在11:23

关于如何在不重新启动进程的情况下也重定向stdout和stderr的任何想法?

–Gauthier
19年5月21日在11:56



#2 楼

我相信您要查找的命令是“ disown”

#3 楼

Use
nohup command &

Is beautiful:
root@index:~# nohup /usr/bin/curl localhost/begemot.php &
[1] 894
root@index:~# nohup: ignoring input and appending output to `nohup.out'

and exit of this terminal, a task proceed to be continued...


评论


作业已经开始。如果时间机器运行正常,这是正确的答案。

–tedder42
19年5月14日在0:01

无论如何,在这种情况下,这仍然是对我们凡人的有益贡献。迪克评论。

–布兰登·希尔(Brandon Hill)
20年5月9日在18:56

#4 楼

在您的bash shell中:

control+z


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

bg


稍后,您可以键入jobs来查看您的进程是否仍在运行。

评论


当我关闭外壳时会不会被杀死?

– Mike
09年7月1日在22:24

不,至少在运行bash时不行。该作业将与ssh会话的PPID分离,并仍作为用户名在服务器上运行。

–乔
09年7月1日在23:20

上面的说明将在您关闭外壳程序时退出该过程。您还需要运行“ disown”命令/内建命令(在bash中),这将使进程与Shell断开关联,并且在退出时不将HUP信号发送给进程。

–马克
09年7月1日在23:25

在我的bash版本[3.2.25(1)-release(i686-redhat-linux-gnu)]上,我测试了该过程,并且在断开连接之前不必放弃工作。子PID与父PID断开连接,并以我的用户名身份运行而不会中断。 YMMV,我想。

–乔
09年7月1日在23:38

#5 楼

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

#6 楼

我已将screen设置为在连接到经常使用的主机时自动运行,以避免出现此问题。

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

当我在会话中出现意外断开连接时为我节省了一两次,否则我会在开始之前忘记启动screen有些事long绕。

评论


这是一个很好的答案!但是,我想知道如何将[$ TERM =“ screen”]与通配符进行比较,例如:screen * but *似乎不能用作通配符。

–本
19-09-25在19:51

嗯,知道了,*必须在外面:“屏幕” *。

–本
19-09-25在19:55

@Ben-如今,byobu是大多数Linux发行版(默认情况下或在标准存储库中可用)所包含的屏幕或tmux的通用包装。它包括byobu-launcher-install,它可以为您自动进行这种设置。有关更多信息,请参见byobu.co和manpages.ubuntu.com/manpages/disco/en/man1/…。

– David Spillett
19-09-26在14:16

#7 楼

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

评论


请注意,retty(pasky.or.cz/~pasky/dev/retty)是一种工具,可让您将在屏幕外运行的进程移入屏幕。如果您忘记了,将工作放在屏幕上可能会很有用。然后,您可以安全地分离屏幕,而不必担心作业停止。

–半径
09年7月1日在22:45

#8 楼

如果您使用的是bash,则可以怀疑带有control-Z的背景和带有bg的背景。帮助bg

 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 [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.


评论


当我关闭计算机,从而切断SSH会话并杀死shell时,它是否会被杀死?

– Mike
09年7月1日在22:25

等待,您是否正在本地计算机上运行命令并使用SSH进行某些输入/输出?还是在远程计算机上运行?如果该命令正在远程计算机上运行,​​那么您应该能够使其后台运行并断开连接。

– Zoredache
09年7月1日在22:28

#9 楼

如果您事先知道要在后台运行,那么unix命令是一个不错的选择。它会在计划的时间在后台启动命令,就像不重复的cron作业一样。根据您的发行版,您可能需要安装它并启动atd守护程序。