進程組,會話和作業控制
在本章中,我們將學習進程組,會話和作業控制。
進程組 - 進程組是一個或多個進程的集合。 進程組由共享相同進程組標識符(PGID)的一個或多個進程組成。 進程組ID(PGID)與進程ID具有相同的類型(pid_t)。 進程組有一個進程組領導,即創建組的進程,進程ID變爲組的進程組標識。
會話 - 它是各種進程組的集合。
作業控制 - 這允許shell用戶同時執行多個命令(或作業),一個在前臺,另一個在後臺。 也可以將作業從前臺移動到後臺,反之亦然。
讓我們通過使用shell(BASH)的例子程序的幫助來理解這一點。
- Shell腳本(在BASH中)執行名爲
basic_commands.sh
的基本命令(日期,回顯,睡眠和校準) - Shell腳本(在BASH中)執行基本命令(ps,echo)
兩個Shell腳本如下 -
#!/bin/bash
#basic_commands.sh
date
echo "Now sleeping for 250 seconds, so that testing job control functionality is smooth"
sleep 250
cal
第二個腳本 -
#!/bin/bash
#process_status.sh
ps
echo "Now sleeping for 200 seconds, so that testing job control functionality is smooth"
sleep 200
ps
使用chmod
命令給文件執行權限。 默認情況下,普通文件只能讀取和寫入權限而不能執行權限。
要停止當前正在運行的進程,需要輸入CTRL + Z
。 這給一個作業編號。 作業可以在前臺或後臺恢復。 如果需要,在前臺使用「fg」
命令恢復作業。 如果需要,要在後臺恢復作業,請使用「bg」
命令。 通過使用它,它將只運行最後一個停止的進程。 如果您想要啓動除最後一個停止的進程之外呢? 只需使用fg
或bg
(例如bg%2或bg%3等)之後的作業編號即可。 如果正在運行的作業在後臺,則可以在前臺運行任何其他任務。 要獲取作業列表,請使用命令 - jobs
。 也可以用CTRL + C
或kill
命令終止進程。 您可以使用kill
命令之後指定作業編號來終止作業。
chmod u+x basic_commands.sh
chmod u+x process_status.sh
./basic_commands.sh
Wed Jul 5 18:30:27 IST 2017
Now sleeping for 250 seconds, so that testing job control functionality is smooth
^Z
[1]+ Stopped ./basic_commands.sh
./process_status.sh
PID TTY TIME CMD
2295 pts/1 00:00:00 bash
4222 pts/1 00:00:00 basic_commands.
4224 pts/1 00:00:00 sleep
4225 pts/1 00:00:00 process_status.
4226 pts/1 00:00:00 ps
Now sleeping for 200 seconds, so that testing job control functionality is smooth
^Z
[2]+ Stopped ./process_status.sh
jobs
[1]- Stopped ./basic_commands.sh
[2]+ Stopped ./process_status.sh
fg
./process_status.sh
^Z
[2]+ Stopped ./process_status.sh
fg %2
./process_status.sh
^Z
[2]+ Stopped ./process_status.sh
fg %1
./basic_commands.sh
^Z
[1]+ Stopped ./basic_commands.sh
jobs
[1]+ Stopped ./basic_commands.sh
[2]- Stopped ./process_status.sh
bg %2
[2]- ./process_status.sh &
fg
./basic_commands.sh
^Z
[1]+ Stopped ./basic_commands.sh
jobs
[1]+ Stopped ./basic_commands.sh
[2]- Running ./process_status.sh &
fg %2
./process_status.sh
^Z
[2]+ Stopped ./process_status.sh
jobs
[1]- Stopped ./basic_commands.sh
[2]+ Stopped ./process_status.sh
kill %1 %2
[1]- Stopped ./basic_commands.sh
[2]+ Stopped ./process_status.sh
[1]- Terminated ./basic_commands.sh
[2]+ Terminated ./process_status.sh