当前位置: 首页 > 教程 > 进程通信 >

进程组,会话和作业控制

精华
小牛编辑
148浏览
2023-03-14

在本章中,我们将学习进程组,会话和作业控制。

进程组 - 进程组是一个或多个进程的集合。 进程组由共享相同进程组标识符(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