📅  最后修改于: 2021-01-18 06:34:24             🧑  作者: Mango
在本章中,我们将熟悉过程组,会话和作业控制。
流程组-流程组是一个或多个流程的集合。一个进程组由一个或多个共享相同进程组标识符(PGID)的进程组成。进程组ID(PGID)与进程ID具有相同的类型(pid_t)。流程组具有一个流程组负责人,该流程组负责人是创建该组的流程,其流程ID成为该组的流程组ID。
会话-它是各种过程组的集合。
作业控制-允许外壳程序用户同时执行多个命令(或作业),其中一个在前台,而所有剩余在后台。也可以将作业从前景移到背景,反之亦然。
让我们借助使用Shell(BASH)的示例程序来理解这一点。
Shell脚本(在BASH中)执行名为basic_commands.sh的基本命令(日期,回显,睡眠和校准)
Shell脚本(在BASH中)执行基本命令(ps,echo)
#!/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