行程群組,對談和作業控制


在本章中,我們將學習行程群組,對談和作業控制。

行程群組 - 行程群組是一個或多個進程的集合。 行程群組由共用相同行程群組識別符號(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」命令。 通過使用它,它將只執行最後一個停止的進程。 如果您想要啟動除最後一個停止的進程之外呢? 只需使用fgbg(例如bg%2或bg%3等)之後的作業編號即可。 如果正在執行的作業在後台,則可以在前台執行任何其他任務。 要獲取作業列表,請使用命令 - jobs。 也可以用CTRL + Ckill命令終止進程。 您可以使用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