在跟控制终端关联的进程中。有前台(fg)和后台(bg)的区别。
在前台的进程接收键盘输入。
当前正在前台运行的进程,通过按键ctrl-c,可以发信号给进程,让它尽快退出。
通过在命令的最后加上&
符号,让shell直接把这个命令放到后台运行。
通过按键ctrl-z,把当前在前台的进程放到后台去。通过jobs可以查看当前所有的作业。
$ jobs
[1]- Stopped vim
[2]+ Stopped emacs
[3] Running sleep 60 &
方括号中间的数字代表job id。+
只是如果直接执行fg
时,这个进程会被从后台再放回前台。
或者通过指定job id来把特定的job放回前台,比如fg %1
将会把vim放回前台。
这个job#同样可以被kill命令使用,例如kill %3
这种写法。
nohup把任务和控制终端分离,当终端断线时,任务不会受到信号的影响,从而退出。
- 如果stdin是终端,nohup把它重定向到不可读的文件
- 如果stdout是终端,重定向到nohup.out文件
- 如果stderr是终端,重定向到stdout