列出当前的所有任务
~$ jobs -l
将任务放到后台执行
~$ sleep 1000 & [1] 8893 ~$ sleep 2000 & [2] 8894 ~$ jobs -l [1]- 8893 Running sleep 1000 & [2]+ 8894 Running sleep 2000 &
将任务转到前台执行
~$ fg %2 sleep 2000
暂停当前任务并转向后台
~$ fg %2 sleep 2000 ^Z [2]+ Stopped sleep 2000 ~$ jobs [1]- Running sleep 1000 & [2]+ Stopped sleep 2000
继续执行后台停止的任务
~$ bg %2 [2]+ sleep 2000 & ~$ jobs -l [1]- 8893 Running sleep 1000 & [2]+ 8894 Running sleep 2000 &
终止某个任务
~$ kill %1 [1]- Terminated sleep 1000 ~$ jobs -l [2]+ 8894 Running sleep 2000 &
Ctrl-C终止前台任务
~$ fg sleep 2000 ^C ~$ jobs -l
上面示例中,我们用Ctrl-Z暂停前台任务并转后台,用bg命令使后台停止的任务继续执行,其实本质上都是向指定进程发送signal,Ctrl-Z发送的是SIGTSTP,bg发送的是SIGCONT。
我们用kill命令发送这些signal试下。
~$ jobs -l ~$ sleep 1000 & [1] 9745 ~$ sleep 2000 & [2] 9746 ~$ jobs -l [1]- 9745 Running sleep 1000 & [2]+ 9746 Running sleep 2000 & ~$ kill -SIGTSTP 9745 [1]+ Stopped sleep 1000 ~$ jobs -l [1]+ 9745 Stopped sleep 1000 [2]- 9746 Running sleep 2000 & ~$ kill -SIGCONT 9745 ~$ jobs -l [1]- 9745 Running sleep 1000 & [2]+ 9746 Running sleep 2000 &
用fg命名把任务转向前台,然后在另一个控制台发送这两个signal看下
~$ fg sleep 2000 [2]+ Stopped sleep 2000 ~$ jobs -l [1]- 9745 Running sleep 1000 & [2]+ 9746 Stopped sleep 2000 ~$ jobs -l [1]- 9745 Running sleep 1000 & [2]+ 9746 Running sleep 2000 & ~$ # 下面是另外一个控制台的命令 ~$ ~ kill -SIGTSTP 9746 ~$ ~ kill -SIGTCONT 9746
效果和用Ctrl-Z加bg命令是一样的。
简单吧。更多signal的知识,请看另外一片文章:Linux下的signal机制