2017.6.26
ps -f
命令能夠表現(xiàn)子shell的嵌套關(guān)系。
添加;
來分隔命令可以指定依次運(yùn)行的一系列命令卿捎。
不過這一系列命令并不是進(jìn)程列表杭措,命令列表想要成為進(jìn)程列表毡庆,這些命令必須包含在括號里蔚约。
echo $BASH_SUBSHELL
返回為0表明沒有子shell奄妨,返回為1或更大的數(shù)涂籽,說明存在苹祟。
子shell用法
探索后臺模式
&
字符會讓進(jìn)程被置于后臺:
wsx@wsx-ubuntu:/etc$ sleep 3000& # sleep命令會在后臺睡眠3000秒
[1] 10469 # 返回兩條信息,方括號內(nèi)是后臺作業(yè)號评雌,后者顯示作業(yè)的進(jìn)程ID
wsx@wsx-ubuntu:/etc$ ps -f # ps命令用來顯示各種進(jìn)程
UID PID PPID C STIME TTY TIME CMD
wsx 10304 10299 0 19:21 pts/0 00:00:00 bash
wsx 10317 10304 0 19:21 pts/0 00:00:00 bash
wsx 10327 10317 0 19:21 pts/0 00:00:00 bash
wsx 10469 10327 0 19:28 pts/0 00:00:00 sleep 3000
wsx 10470 10327 0 19:28 pts/0 00:00:00 ps -f
wsx@wsx-ubuntu:/etc$ jobs # 也可以通過jobs命令來顯示后臺作業(yè)信息
[1]+ 運(yùn)行中 sleep 3000 &
jobs
命令在方括號內(nèi)顯示出作業(yè)號树枫,還顯示了作業(yè)的當(dāng)前狀態(tài)以及對應(yīng)的命令。
將進(jìn)程列表置于后臺
wsx@wsx-ubuntu:/etc$ (sleep 2; echo $BASH_SUBSHELL; sleep 2) &
[2] 10729
wsx@wsx-ubuntu:/etc$ 1
[2]+ 已完成 ( sleep 2; echo $BASH_SUBSHELL; sleep 2 )
在CLI中運(yùn)行子shell的創(chuàng)造性方法之一就是將進(jìn)程列表置于后臺模式景东。既可以在子shell中進(jìn)行繁重的處理工作砂轻,同時也不會讓子shell的I/O受制于終端。
協(xié)程
協(xié)程可以同時做兩件事斤吐。它在后臺生成一個子shell搔涝,并在這個子shell中執(zhí)行命令。
要進(jìn)行協(xié)程處理和措,得使用coproc
命令庄呈,還有要在子shell中執(zhí)行的命令。比如
wsx@wsx-ubuntu:/etc$ coproc sleep 10
[2] 11026
除了會創(chuàng)建子shell之外派阱,協(xié)程基本上就是將命令置入后臺模式诬留。jobs
可以顯示作業(yè)信息。
可以將協(xié)程與進(jìn)程列表結(jié)合起來產(chǎn)生嵌套的子shell。
wsx@wsx-ubuntu:~$ coproc ( sleep 10; sleep 2 )
[1] 3438
wsx@wsx-ubuntu:~$ jobs
[1]+ 運(yùn)行中 coproc COPROC ( sleep 10; sleep 2 ) &
wsx@wsx-ubuntu:~$ ps --forest
PID TTY TIME CMD
3420 pts/1 00:00:00 bash
3438 pts/1 00:00:00 \_ bash
3439 pts/1 00:00:00 | \_ sleep
3440 pts/1 00:00:00 \_ ps