进程组、会话和作业控制
本章我们将学习进程组、会话和作业控制。
进程组 − 进程组是一个或多个进程的集合。一个进程组包含一个或多个共享相同进程组标识符 (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
广告