结束进程

一个进程由于以下5个原因中的一个终止。
  –main函数调用了return;
  –调用了exit函数;
  –调用了_exit函数;
  –调用了abort函数;
  –被一个信号终止。
前三个原因都是正常终止,后面两个是非正常终止。
无论进程为何终止,最后都执行相同的内核代码,关闭打开的文件,释放内存资源,和其他清理工作。
 
 
 
exit函数

int exit(int status);

  –exit导致程序正常终止,并且返回给父进程的状态(status)。
无论进程为何终止,最后都执行相同的内核代码,关闭打开的文件,释放内存资源,和其他清理工作。
 
 
abort函数
  –void abort(void);
  –abort导致程序异常终止;
  –abort还可以让程序产生core,这是大多数调试器用于分析程序崩溃时的文件。
虽然任何打开的文件都被关闭了,但abort仍然是个粗暴的调用,应该作为最后的手段来使用。
比如当你碰到一个很严重内存不足这样的错误,无法用程序的方式处理时再使用。
 
 
kill函数

#include <signal.h>

#include <sys/types.h>

int kill(pid_t pid, int sig);

exit,abort用来杀死进程自己。
kill函数用来杀死另一个进程。
参数pid指定一个要杀死的进程,而sig是要发送的信号,本章内容是杀死一个进程,所以只需要关注SIGKILL一个信号。
 
 
kill函数例子
int main(int arg, char *args[])
{
    if (arg > 1)
    {
        int pid = atoi(args[1]);
        kill(pid, SIGKILL);
    }
    else
    {
        printf("pid = %u\n",getpid());
        sleep(60);
    }
    return 0;
}

 

 
 
 
posted @ 2015-05-12 00:42  张仕传  阅读(163)  评论(0编辑  收藏  举报