【Linux C】进程控制

本文介绍了进程的基本概念,包括进程ID的获取、父子进程的关系、进程创建(fork与vfork)、进程终止(exit与system)、进程替换(exec)等内容。特别讨论了如何避免僵尸进程的产生及其解决方法。

1.        程序—进程—进程ID—pit_t类型。

2.        Get pid();取得进程IDgetppid();取得父进程ID。

a)         getuid();geteuid();   getgid(); getegid(); 取得用户ID及组ID。

3.        Fork函数创建新的进程。 Pid_tfork(void);

a)        Fork函数不需要参数。

b)        对于父进程fork函数返回创建子进程pid号。

c)        对于子进程fork函数返回0, 系统0号进程为内核进程,以示区别。

d)        若创建子进程错误,则fork函数返回-1。

e)        创建子进程复制父进程进程空间,包括数据段和堆栈段。共享代码段。

4.        Vfork函数创建共享父进程空间的子进程,且子进程一定比父进程先运行。

5.        不要在任何函数调用中使用vfork函数,避免函数栈帧空间的多次返回。

6.        Void exit(int);函数会深入内核注销掉进程的内核数据结构。并且释放进程的资源。

a)        Exit函数的参数表示退出的状态。

7.        Exit函数为封装了Linux系统调用_exit函数,exit函数在用户空间做善后工作如清理用户I/O缓冲区,将内容写入磁盘等。以后进入内核释放用户进程的地址空间。

8.        调试多进程:

a)        设置跟踪流: set follow-fork-mode [parent|child]跟踪流选项。

b)        set detach-on-fork [on|off] set指定的进程将被调试,另一个进程将被停止。

c)        attach命令:没看懂!待查资料。

9.        exec搜寻文件系统中的文件,并将内容复制到exec函数的地址空间,取代原进程的内容。实现讲磁盘中的程序加载到内存中。Exec几乎不改变进程的身份属性。

a)        execl(); execle();execv();  execve(); execlp();  execvp();

10.    exech函数执行解释器文件(如shell脚本)时,解释器文件中命令行参数在前,exec函数传递给新程序的命令行在后。

11.    使用system函数调用shell命令。

a)        Int system(const char *cmdstring);

b)        System的返回状态。

c)        System实现过程中调用fork及exec执行效率偏低,但是函数添加了出错处理,信号处理,及wait函数避免出现僵尸进程。

12.    Wait函数等待子进程的退出,并获得起退出的状态信息,但只能等待一个结束的进程。

13.    Waitpid函数等待一个指定的进程结束。且可以不阻塞的等待一个进程。

14.    当父进程调用fork()函数创建子进程,而不用wai函数取得子进程的结束状态信息时,僵尸进程会出现。僵尸进程放弃了几乎所有系统资源包括进程空间,因而僵尸进程不能执行,虽然僵尸进程占用的内存微乎其微且不能被CPU调用,但是僵尸进程一直存在在系统中知道父进程取得结束状态信息。 Linux有严格的进程数目限制,如果僵尸进程达到一定数目是,系统中将不能产生新的进程。

15.    Linux中 Init进程领养所有的孤儿进程,会永远调用wait函数避免产生僵尸进程。

16.    Wait3和wait4函数输出错误的统计信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值