进程-

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程-相关的知识,希望对你有一定的参考价值。

1.  进程退出的方式

1) 正常退出
在main函数中执行return
调用exit函数,并不处理文件描述符,多进程
调用_exit或_Exit.
进程的最后一个线程执行了返回语句
进程的最后一个线程调用pthread_exit函数

2) 非正常退出
调用abort,产生SIGABRT信号
进程接收到某些信号
最后一个线程对“取消”请求做出响应


3) exit()和_Exit() _exit() 退出的区别:
_Exit() _exit()本质是一样的。
exit()函数在退出前允许调用其他的函数做一些收尾工作,_exit()函数要求立即退出进程。
exit()退出前可以调用atexit()注册的函数。
return 其实也会调用atexit()注册的函数。

 

代码说明:

例子1:exit() 函数查看退出
#include<stdio.h>
#include<stdlib.h>
int main()
{
  printf("begin\n");
  exit(0);
  printf("end\n");
  return 0;
}

[[email protected] day07]# vi exit1.c
[[email protected] day07]# gcc exit1.c -o exit1
[[email protected] day07]# ./exit1
begin

上面结果说明了,调用了exit(),相当于在这一点就选择了return的作用,退出了程序。

例子2:exit()函数,调用atexit() 函数的效果
#include<stdio.h>
#include<stdlib.h>
void at()
{
  printf("at is called\n");
}
int main()
{
  atexit(at);//注册了退出前调用的函数
  printf("begin\n");
  exit(0);
  printf("end\n");
  return 0;
}


[[email protected] day07]# vi exit2.c
[[email protected] day07]# gcc exit2.c -o exit2
[[email protected] day07]# ./exit2
begin
at is called

上面的结果说明:
执行exit() 函数,程序退出时,可以调用一个函数-atexit()函数,在退出时,调用该函数内的数据;


例子3:_exit() 函数,强制退出
#include <stdio.h>
#include <stdlib.h>

void at()

{
  printf("at is called\n");
}
int main()

{
  atexit(at);//注册了退出前调用的函数at
  printf("begin\n");
  _Exit(0);//立即退出,不调用at()
  printf("end\n");
  return 0;//效果等同于exit()
}
[[email protected] day07]# gcc exit.c -o exit
[[email protected] day07]# ./exit
begin
结果表示:
_exit() 函数,是强制退出,就算有atexit() 函数,也不会调用,相当于机器没有备用电源,直接断电;

 

例子4: 如果没有用exit等函数,只有return,会如何
#include <stdio.h>
#include <stdlib.h>

void at()

{
  printf("at is called\n");
}
int main()
{
  atexit(at);//注册了退出前调用的函数at
  printf("begin\n");
  printf("end\n");
  return 0;//效果等同于exit()
}

[[email protected] day07]# vi exit3.c
[[email protected] day07]# gcc exit3.c -o exit3
[[email protected] day07]# ./exit3
begin
end
at is called

结果说明:
return函数,相当于exit,退出还是会调用atexit函数,也就是说,atexit函数,会在退出时,被吊起,但是,需要查看如何退出,如果是_exit() 函数退出,则不会被吊起;

 

以上是关于进程-的主要内容,如果未能解决你的问题,请参考以下文章

如何清理僵尸进程(转载)

多任务编程 -- 孤儿进程和僵尸进程

多任务编程 -- 孤儿进程和僵尸进程

孤儿进程僵尸进程及其回收

孤儿进程僵尸进程及其回收

孤儿进程和僵尸进程