可能的重复:我可以不对已启动的进程进行hup /筛选吗?
在Unix(特别是Linux)上,我已经在常规ssh-> bash会话中开始了工作。我想尽快离开工作,但现在我意识到这项工作将要花费几个小时。
如果我刚刚在银幕上开始了这项工作,我可以分开工作并回家。但是我没有。
有什么方法可以将作业与其ssh会话断开连接,因此我可以关闭我的计算机,(断开TCP连接并终止ssh会话),但是程序是否继续运行?
我不在乎它的输出-实际上,我将stdout重定向到了一个文件。我只希望它运行完成。
#1 楼
您可以按ctrl-z
中断该进程,然后运行bg
以使其在后台运行。 >然后您可以运行jobs
(将disown %1
替换为1
输出的进程号)以从终端分离进程。 ,它将与您启动它的终端分离。此答案具有更多信息
#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
评论
尝试此过程有多安全?有问题吗?
– ndemou
16年7月24日在13:53
放弃真的是小菜一碟,谢谢@大卫。
–fiorentinoing
19年1月20日在11:23
关于如何在不重新启动进程的情况下也重定向stdout和stderr的任何想法?
–Gauthier
19年5月21日在11:56