进程基础的一些相关函数

来源:互联网 发布:vr视频软件 编辑:程序博客网 时间:2024/04/30 14:18
ret = fork() 和 ret = vfork()的区别:
fork() 这个函数分出的进程,父进程和子进程是随机运行的。
vfork() 这个函数分出的进程,一定是子进程先执行完后,再执行父进程。

pid = wait(&status);这个函数是父进程在等待子进程的死亡,并将状态赋值给status.
WIFEXITED(status) 这个数为正,则子进程为正常死亡  
WIFSIGNALED(status) 这个数为正,则子进程为不正常死亡。

pid = waitpid(ret, &status, 0) //阻塞等待pid值为ret的子进程退出。
while((pid = waitpid(ret, &status, WNOHANG)) == 0)
{
    //干自己想做的事,等到子进程一死亡就马上跳出循环。
}

函数名: exit()  头文件 <stdio.h>
函数的使用形式为”void exit(int status)”,参数status为退出进程时的状态,父进程将获得该状态值。
所在头文件:stdlib.h(如果是”VC6.0“的话头文件为:windows.h)
功 能: 关闭所有文件,终止正在执行的进程。
exit(1)表示异常退出.这个1是返回给操作系统的。
exit(x)(x不为0)都表示异常退出
exit(0)表示正常退出
exit()的参数会被传递给一些操作系统,包括UNIX,Linux,和MS DOS,以供其他程序使用。


2._exit函数

使用_exit函数,须包含“unistd.h”头文件,函数形式为”void _exit(int status)”,参数status为退出时的状态,父进程将获得该状态值。C语言标准指定了EXIT_SUCCESS和EXIT_FAILURE作为程序正常结束和异常终止的两个宏。_exit函数将立即结束调用它的进程,与进程相关的任何打开的文件描述符都将关闭,进程的子进程都将变为init进程(pid=1)的子进程。使用_exit函数退出程序时,不会执行atexit中注册的处理函数。


exit()和_exit()最大的区别是:exit()会先清理缓存,再退出进程。而_exit()则什么都不管直接退出, 不管缓存会怎么样,也不输出缓存的内容。




3. atexit()   /*向系统注册exit()执行时的退出处理函数*/
因为这些处理函数是存放在栈里的,所以exit退出执行时 是先注册后执行的。而且_exit()退出时是不执行这些函数的,
1 0