Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188656
  • 博文数量: 45
  • 博客积分: 1657
  • 博客等级: 上尉
  • 技术积分: 765
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-13 12:42
文章分类

全部博文(45)

文章存档

2012年(1)

2011年(4)

2010年(6)

2009年(3)

2008年(31)

分类: IT职场

2008-09-01 19:13:18

保证每个进程有父进程:
一个进程结束时,内核检查所有active进程,看该进程是否某某的父进程。
如果是,把某某父进程变为init进程。

子进程早于父进程结束时,内核为其保留一个最小信息集:进程号,退出状态和占用cpu时间。
zombie process
一个进程结束,但是他的父进程没有wait他。

被init收养的进程,在结束时,init会调用wait收集信息。

进程正常退出还是非正常退出,父进程都异步地收到一个SIGCHLD信号,默认忽略些信号。

最好在收到sigchld信号时,调用wait,

wait    是阻塞的,直到有子进程结束,  等第一个结束的子进程
waitpid 有选项可以不阻塞,                   可以指定某个子进程

如果某子进程已zombie了,调用wait将立即返回

waitpid
pid == 1
Waits for any child process. In this respect, waitpid is equivalent to wait.

pid > 0
Waits for the child whose process ID equals pid.

pid == 0
Waits for any child whose process group ID equals that of the calling process. (We discuss process groups in Section 9.4.)

pid < 1
Waits for any child whose process group ID equals the absolute value of pid.

wait3,wait4
多了一个struct rusage指针参数,允许内核返回该进程及其子进程使用的所有资源之和。
资源信息包括:用户cpu,系统cpu,页错误数,收到信号数等。

man setbuf
当output stream是unbuffered,信息会立即出现在目标文件中,
如果是block buffered,许多字符会保存,直到作为块写到文件,
如果是line buffered,遇到newline就会输出,
通常,file是block buffered,stdout是line buffered,而stderr是unbuffered

exec系列函数
l 代表list        char *arg0, char *arg1, ..., char *argn, (char *)0(NULL POINTER)
v 代表vector      

execle和execve

exec关系
只有execve是系统调用,其它都是调用execve的,
execl --> execv
execvp --> execv --> execve

外面变量和环境变量可能这样用
在main方法里,extern char **environ
就可以使用环境变量了,效果与main的第三个参数相同。
5到10节
阅读(501) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~