Linux进程管理与程序开发

来源:互联网 发布:linux 没有rc.d 编辑:程序博客网 时间:2024/06/06 03:21

获取进程的父进程号PPID,进程号PID,真实用户ID,进程有效用户EUID,进程组好PGID

 

 

进程控制:

 

fork的实例:

打印结果:

虽然main程序里面只有一个printf("byte!\n");,但是却打印了两遍,这个应该就是父子进程都会执行。

fork()是一个拷贝父进程的副本,从而拥有自己独立的代码段、数据段以及堆栈空间,即成为一个独立的实体,而vfork是共享父进程的代码以及数据段。

对于fork(),对于文件描述符则是以共享的方式使用。

 运行新进程:

 

调用execv()并不创建新进程,所以前后的进程号不变, exec只是用新程序替换了当前进程的正文、数据、堆和栈段。

 

system()用来创建新进程,执行给定的shell命令:

 wait()等待任意一个子进程结束,将返回当前结束的子进程的PID, 同时将返回的状态存储在”__stat_loc“变量中。如果执行失败则返回-1,错误原因在errno中

判断返回状态:

 

等待某个进程结束:

 

等待子进程更新状态:

 

父进程对子进程进行跟踪:

 

退出进程:

在Linux下,可以通过以下方式结束进程:

像exit()或_exit()发布一个调用。

在main函数中发布一个return

隐含的离开main函数

 

abort()终止程序

atexit() 退出进程

on_exit()正常退出进程前调用的函数。

exit()用来结束当前进程的执行,并把参数status返回给父进程,而进程所有的缓冲区数据会自动写回并关闭文件。

 

比较诧异的输出:

 

这是为什么呢?不应该是output

                                             content in buffer 吗?

不是,其只会输出output,将程序修改一下如下,看输出又是什么?

 

输出结果:

此看出其会输出直至“\n”为止,这是因为_exit()不会处理标准i/o缓冲区,如果要更新需要调用exit(),由此我们一定要非常小心了,以后在调试的时候,不能够随便相信printf输出,万一没有输出来,岂不是惨的很深...

 

 

 

原创粉丝点击