我有一个命令,该命令使用git从Linux Shell将文件上传到远程服务器,这将需要许多小时才能完成。
如何将正在运行的程序放在后台?这样我仍然可以在Shell上工作并且该过程也可以完成?
使用CTRL + Z暂停该过程,然后使用命令bg在后台将其恢复。例如:
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:
bash
作业控制在进程运行时 键入 暂停 字符(通常为^ Z,Control-Z)将导致该进程停止并将控制权返回给bash。[…]用户然后可以使用bg命令在后台继续操作此作业的状态[…]。^ Z立即生效,并具有额外的副作用,导致丢弃待处理的输出和提前输入。 bg [ jobspec …] 在后台 恢复每个暂停的作业 jobspec ,就好像它是由&开头的。如果 不存在 jobspec ,则使用 当前作业 的shell概念。
作业控制在进程运行时 键入 暂停 字符(通常为^ 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
/dev/null
要将错误消息设置为其他文件,请将更改&1为文件名。
&1
另外:您可以使用jobs命令查看这些后台进程的索引列表。您可以通过运行kill %1或kill %2将数字作为该进程的索引来杀死后台进程。
jobs
kill %1
kill %2