开发手册 欢迎您!
软件开发者资料库

流程组,会话和工作控制

进程间通信进程组,会话和作业控制 - 从简单和简单的步骤学习过程间通信,从基本到高级概念,包括概述,过程信息,过程映像,过程创建和终止,子过程监控,过程组,会话和作业控制,过程资源,其他进程,覆盖进程映像,相关系统调用(系统V),系统V和Posix,管道,命名管道,共享内存,消息队列,信号量,信号,内存映射。

在本章中,我们将熟悉流程组,会话和工作控制.

流程组 : 进程组是一个或多个进程的集合.进程组由共享相同进程组标识符(PGID)的一个或多个进程组成.进程组ID(PGID)与进程ID具有相同的类型(pid_t).进程组具有进程组负责人,该进程组负责创建组,其进程ID成为组的进程组ID.

会话 : 去;它是各种过程组的集合.

作业控制 : 这允许shell用户同时执行多个命令(或作业),一个在前台,一个保留在后台.也可以将作业从前台移动到后台,反之亦然.

让我们在使用shell(BASH)的示例程序的帮助下理解这一点.

  • Shell脚本(在BASH中)执行名为basic_commands.sh的基本命令(date,echo,sleep和cal)

  • Shell脚本(在BASH中)执行基本命令(ps,echo)

#!/bin/bash#basic_commands.shdateecho "Now sleeping for 250 seconds, so that testing job control functionality is smooth"sleep 250cal


#!/bin/bash#process_status.shpsecho "Now sleeping for 200 seconds, so that testing job control functionality is smooth"sleep 200ps

使用chmod命令为文件赋予执行权限.默认情况下,普通文件只获得读写权限而不执行权限.

要停止当前运行的进程,需要输入CTRL + Z.这给你一个工号.作业可以在前台或后台恢复.如果需要,要在前台恢复作业,请使用'fg'命令.如果需要,要在后台恢复作业,请使用"bg"命令.通过使用它,它将只运行最后停止的进程.如果您想要从最后停止的进程以外启动怎么办?只需在fg或bg之后使用作业编号(比如bg%2或bg%3等).如果正在运行的作业在后台,您可以在前台运行任何其他任务.要获取作业列表,请使用命令,作业.也可以使用CTRL + C或kill命令终止进程.您可以在使用kill命令时传递作业号.

检查以下输出,该输出说明停止作业,将作业从前台移动到后台,反之亦然,终止作业,等等.

chmod u+x basic_commands.shchmod u+x process_status.sh./basic_commands.shWed Jul 5 18:30:27 IST 2017Now sleeping for 250 seconds, so that testing job control functionality is smooth^Z[1]+ Stopped ./basic_commands.sh./process_status.shPID   TTY   TIME     CMD2295  pts/1 00:00:00 bash4222  pts/1 00:00:00 basic_commands.4224  pts/1 00:00:00 sleep4225  pts/1 00:00:00 process_status.4226  pts/1 00:00:00 psNow sleeping for 200 seconds, so that testing job control functionality is smooth^Z[2]+ Stopped      ./process_status.shjobs[1]- Stopped      ./basic_commands.sh[2]+ Stopped      ./process_status.shfg./process_status.sh^Z[2]+ Stopped      ./process_status.shfg %2./process_status.sh^Z[2]+ Stopped      ./process_status.shfg %1./basic_commands.sh^Z[1]+ Stopped      ./basic_commands.shjobs[1]+ Stopped      ./basic_commands.sh[2]- Stopped      ./process_status.shbg %2[2]- ./process_status.sh &fg./basic_commands.sh^Z[1]+ Stopped      ./basic_commands.shjobs[1]+ Stopped      ./basic_commands.sh[2]- Running      ./process_status.sh &fg %2./process_status.sh^Z[2]+ Stopped      ./process_status.shjobs[1]- Stopped      ./basic_commands.sh[2]+ Stopped      ./process_status.shkill %1 %2[1]- Stopped      ./basic_commands.sh[2]+ Stopped      ./process_status.sh[1]- Terminated   ./basic_commands.sh[2]+ Terminated   ./process_status.sh