我有一个命令,可以使用git将文件从Linux shell上传到远程服务器,这需要很多小时才能完成。
我怎样才能把正在运行的程序放在后台?这样我仍然可以在shell上工作,并且这个过程也完成了?
使用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)
关于作业控制和bash
手册页面中bg
使用的更多信息:
JOB CONTROL
在进程运行时键入suspend字符(通常为^Z,CONTROL-Z)会导致该进程停止并将控制权返回给bash。[…]然后,用户可以使用bg命令在后台继续操作此作业的状态,[…]。A^Z立即生效,并具有导致挂起的输出和提前打印被丢弃的额外副作用。bg[jobspec…]
在后台恢复每个暂停的作业jobspecobspec不存在,则使用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
来终止后台进程,其中数字是该进程的索引。