128

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

我怎样才能把那个正在运行的程序放在后台?这样我仍然可以在 shell 上工作并且该过程也完成了吗?

4

1 回答 1

236

使用 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 命令在后台继续它,[...]。A ^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 %1您可以通过运行或kill %2使用数字作为进程的索引来终止后台进程。

于 2012-12-03T03:47:53.437 回答