UNIX环境C语言编程(8)-进程关系
来源:互联网 发布:凤阳安广网络 编辑:程序博客网 时间:2024/06/10 17:08
1、进程组
•进程组是一个或多个进程的集合
•#include <unistd.h>
•pid_t getpgrp(void); #获取进程组ID
•每个进程组有一个组长(其进程ID=进程组ID),组长进程终止时,进程组依然存在
•一个进程可以加入一个现有的进程组,或创建一个新的进程组
•int setpgid(pid_tpid,pid_tpgid);
•一个进程只能设置自己的或其子进程的进程组ID
2、会话
•会话是一个或多个进程组的集合
•#include <unistd.h>
•pid_t setsid(void); #创建新的会话
•如果当前进程不是一个进程组长,将创建一个新的会话,结果:
•1、这个进程成为会话的领导,也是这个会话中的唯一进程
•2、这个进程成为新进程组的组长,进程组ID等于这个进程的进程ID
•3、这个进程没有控制终端
3、控制终端
•一个会话可以有一个控制终端,通常是我们登录的终端窗口
•创建与控制终端连接的对话领导称为控制进程
•对话内的进程组可以分为一个前台进程组及一个或多个后台进程组
•终端产生的中断信号(Ctrl+C)或退出信号(Ctrl+\)只能送给前台进程组
•终端检测到网络断连后,将给会话领导(也是控制进程)发送挂起信号
•有时不管标准输入、标准输出是否被重新定向,程序都要与控制终端交互作用,保证程序读写控制终端的方法是打开文件/dev/tty
•典型的例子是用于读口令的getpass(3)函数
•看这个例子,salaries文件包含工资信息,文件本身已加密
•crypt < salaries |lpr
4、任务控制
•任务控制允许在一个终端上同时运行多个任务,可以控制哪个任务在前台运行,哪些任务在后台运行
•所谓任务,其实就是一组进程
•在终端启动进程时,可以指定前台或后台运行,如:
•vi main.c #启动一个前台任务
•pr *.c |lpr & #启动一个后台任务
•make all & # 启动后台任务
•后台任务读取输入时的交互示例:
$ cat > temp.foo & start in background, but it'll read from standard input [1] 1681 $ we press RETURN [1] + Stopped (SIGTTIN) cat > temp.foo & $ fg %1 bring job number 1 into the foreground cat > temp.foo the shell tells us which job is now in the foreground hello, world enter one line ^D type the end-of-file character $ cat temp.foo check that the one line was put into the file hello, world
5、SHELL执行程序
•查看shell如何执行程序,以及与进程组、控制终端和会话等概念的关系
•ps -opid,ppid,pgrp,session,tpgid,comm # Linux平台精确支持
•显示结果取决于shell是否支持任务控制(假定支持任务控制)
•PID PPID PGRP SESS TPGID COMMAND
• 2837 2818 2837 2837 5796 bash
• 5796 2837 5796 2837 5796ps
•ps -opid,ppid,pgrp,session,tpgid,comm &
• PID PPID PGRP SESS TPGID COMMAND
• 2837 2818 2837 2837 2837 bash
• 5797 2837 5797 2837 2837ps
0 0
- UNIX环境C语言编程(8)-进程关系
- UNIX环境C语言编程(6)-进程环境
- UNIX环境C语言编程(7)-进程控制
- UNIX环境C语言编程(10)-守护进程
- UNIX环境C语言编程(12)-进程间通信
- UNIX环境C语言编程(13)-高级进程间通信
- Unix环境高级编程—进程关系
- unix环境高级编程-进程关系
- 《UNIX环境高级编程》--9进程关系
- 《unix高级环境编程》进程关系——进程组
- 《unix高级环境编程》进程关系——进程组
- 《UNIX环境高级编程》第三部分进程之进程关系
- unix环境高级编程--进程关系与守护进程
- UNIX下C语言编程--进程(一)
- UNIX环境C语言编程(1)-概述
- UNIX环境C语言编程(9)-信号
- UNIX环境C语言编程(14)-sockets
- UNIX环境C语言编程(17)-线程
- Nginx 设置Combo减少Http请求
- GNU C __attribute__ 机制简介
- Android多用户API
- 线程同步 mutex
- 自定义密码框 让你实现一格一格输密码
- UNIX环境C语言编程(8)-进程关系
- save
- IOS学习之WebView加载本地HTML代码或网络资源
- SpringMVC常用基础知识【转】
- mktemp /tmp/setup.shXXXXXXXXXX失败
- 85ViewTreeObserver.addOnGlobalLayoutListener(listener)
- 设计模式之状态模式
- Algorithm Gossip: 超长整数计算(大数计算)
- Access denied for user 'root'@'localhost' (using password