使用&符号后台执行作业:
root@xjb:~# sleep 1111 & [1] 43442 root@xjb:~# sleep 2222 & [2] 43443 root@xjb:~# sleep 3333 & [3] 43444中括号里的数字为作业序号(JOB_SPEC), 后面的数字为PID。
查看作业信息:
root@xjb:~# jobs -l [1] 43442 Running sleep 1111 & [2]- 43443 Running sleep 2222 & [3]+ 43444 Running sleep 3333 &作业序号后面的+表示当前作业,-表示当前作业的下一个作业。
把后台序号为1的作业调至前台执行,并让其成为当前作业:
root@xjb:~# fg 1 sleep 1111若不加序号参数,则会将当前作业调至前台执行。
把前台作业调至后台并暂停:按快捷键ctrl+z
^Z [1]+ Stopped sleep 1111查看作业状态:
root@xjb:~# jobs -l [1]+ 43442 Stopped sleep 1111 [2] 43443 Running sleep 2222 & [3]- 43444 Running sleep 3333 &可以看到1号作业已经是当前作业了。 注意到1号作业的状态是Stopped状态,命令最后没了&符号。
让1号作业由暂停状态转为执行:
root@xjb:~# bg 1 [1]+ sleep 1111 &再查看作业状态:
root@xjb:~# jobs -l [1] 43442 Running sleep 1111 & [2]- 43443 Running sleep 2222 & [3]+ 43444 Running sleep 3333 &等1号作业执行完,再查看作业状态:
root@xjb:~# jobs -l [1] 43442 Done sleep 1111 [2]- 43443 Running sleep 2222 & [3]+ 43444 Running sleep 3333 & root@xjb:~# jobs -l [2]- 43443 Running sleep 2222 & [3]+ 43444 Running sleep 3333 &如果想关闭3号作业,先将其调至前台,然后按快捷键ctrl+c:
root@xjb:~# fg 3 sleep 3333 ^C root@xjb:~# jobs -l [2]+ 43443 Running sleep 2222 &还有一点要注意:
作业(job)的概念是基于当前shell的。一个进程只有是当前shell的子进程,才可能算作当前shell的作业,才能用jobs命令查询到。
作业会有个作业序号,进程有个进程号(PID),进程号在任何shell里都能使用,是系统唯一的,作业序号只有在当前shell里能使用。
举个例子,比如kill命令。
在当前shell下启动个作业:
root@xjb:~# sleep 5000 & [1] 44905作业序号是1,进程号是44905。
在当前shell下,以下两条命令效果相同,都是杀死进程。
kill -9 44905 kill -9 %1但是第一条命令可以在其他shell下执行,而第二条命令则不可以。
