程序組、會話和作業控制
本章我們將學習程序組、會話和作業控制。
程序組 − 程序組是一個或多個程序的集合。一個程序組包含一個或多個共享相同程序組識別符號 (PGID) 的程序。程序組 ID (PGID) 與程序 ID (pid_t) 型別相同。一個程序組有一個程序組組長,它是建立該組的程序,其程序 ID 成為該組的程序組 ID。
會話 − 它是由多個程序組組成的集合。
作業控制 − 這允許 shell 使用者同時執行多個命令(或作業),一個在前臺,其餘的在後臺。也可以將作業從前臺移動到後臺,反之亦然。
讓我們透過使用 shell (BASH) 的示例程式來理解這一點。
執行基本命令(date、echo、sleep 和 cal)的 shell 指令碼(在 BASH 中),命名為 basic_commands.sh
執行基本命令(ps、echo)的 shell 指令碼(在 BASH 中)
#!/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
廣告