如何将当前正在运行的linux进程置于后台?[关闭]


111

我有一个命令,该命令使用git从Linux shell将文件上传到远程服务器,这将需要许多小时才能完成。

如何将正在运行的程序放在后台?这样我仍然可以在shell上工作并且该过程也可以完成吗?


只是一个猜测,但是您是否尝试过ctrl + z或像这样运行命令?#command&
EralpB

该命令已经在运行,所以我没有其他选择。我不确定要尝试哪个命令。我不想破坏当前流程,所以没有进行实验
Mirage

那我们应该等待一个更专业的答案:)我的意思是,如果您有机会重新开始。(命令与事物)
EralpB

在这个问题上所接受的回答者解释了需要采取三个步骤:stackoverflow.com/questions/625409/...
伦纳德Saers

您也可以打开第二个腻子实例,然后再次连接到服务器以获得另一个外壳。虽然解决的ctrl+z方法很棒。
Ela782 '16

Answers:


207

使用CTRL + Z暂停该过程,然后使用命令bg在后台将其恢复。例如:

sleep 60
^Z  #Suspend character shown after hitting CTRL+Z
[1]+  Stopped  sleep 60  #Message showing stopped process info
bg  #Resume current job (last job stopped)

手册页中有关作业控制和bg使用的更多信息bash

作业控制在进程运行时
键入暂停字符(通常为^ Z,Control-Z)将导致该进程停止并将控制权返回给bash。然后,用户可以使用bg命令在后台继续执行此作业的状态。^ Z立即生效,并具有额外的副作用,导致丢弃待处理的输出和提前输入。

bg [ jobspec ...] 在后台
恢复每个暂停的作业jobspec,就好像它是由&开头的。如果 不存在jobspec,则使用当前作业的shell概念。

编辑

要启动一个过程,您甚至可以杀死终端,并且终端仍在运行

nohup [command] [-args] > [filename] 2>&1 &

例如

nohup /home/edheal/myprog -arg1 -arg2 > /home/edheal/output.txt 2>&1 &

要忽略输出(不是很明智),将文件名更改为 /dev/null

要将错误消息设置为其他文件,请将更改&1为文件名。

另外:您可以使用jobs命令查看这些后台进程的索引列表。您可以通过运行kill %1kill %2以数字作为该进程的索引来终止后台进程。


我尝试了一下,但是由于它输出了一些东西,它再次出现在前景中,它显示了上传了多少数据
Mirage 2012年

该过程将按照您的指示在开始时将所有输出写入终端。您将不得不重新启动它以获取输出以写入文件或/dev/null。请参阅上面的编辑。
Ed Heal 2012年

因此,这意味着,如果该过程已经开始,则无法重定向输出
Mirage

确实是的。您不能仅从其运行的外壳影响该过程。您可以这样做kill -9 <pid of your shell,然后该过程仍将运行,并且将丢弃输出-但您必须再次登录才能启动新的Shell。
Ed Heal 2012年

disown如果您需要注销终端会话,并且希望它继续运行,也可以使用该命令。
柯里·罗里格(Rorkig kirk)17年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.