一尘不染

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

linux

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

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


阅读 1569

收藏
2020-06-07

共1个答案

一尘不染

使用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将数字作为该进程的索引来杀死后台进程。

2020-06-07