首页 > 代码库 > 一、进程与信号的结构

一、进程与信号的结构

认识进程

ps -ef |moreUID         PID   PPID  C STIME TTY          TIME CMDroot          1      0  0 19:06 ?        00:00:04 /sbin/init auto nopromptroot          2      0  0 19:06 ?        00:00:00 [kthreadd]root          3      2  0 19:06 ?        00:00:00 [ksoftirqd/0]root          4      2  0 19:06 ?        00:00:00 [kworker/0:0]root          5      2  0 19:06 ?        00:00:00 [kworker/0:0H]

进程在内核中的结构

技术分享

内核进程task_struct通过file_struct 操作文件

技术分享

linux内核源码task_struct

cd /usr/src/linux-headers-4.4.0-28/include/linuxls sched.hvim sched.h  vi 下搜索 进程指针结构体:/task_struct1380 struct task_struct {1381         volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */1382         void *stack;1383         atomic_t usage;1384         unsigned int flags;     /* per process flags, defined below */1385         unsigned int ptrace;vi 下搜索 文件指针结构体:/struct file1564 /* open file information */1565         struct files_struct *files;

 C程序启动过程

  内核启动特殊例程

  启动例程

    在进程的main函数执行前会启动

    该例程放在在/lib/libc.so**中

    编译器在编译时会启动例程编译进可执行文件中

  启动例程作用

    搜索命令行参数传递给main函数中的argc、argv

    搜索环境信息构建环境表并传递给main函数

    等级进程终止函数

进程终止

  正常终止

    main函数返回

    调用exit(标准库函数)

    调用_exit或者_Exit(系统调用)

    最后一个线程从启动例程返回

    最后一个线程pthread_exit

  异常终止

    调用abort

    接受一个信号并终止返回

    最后一个线程对取消请求做处理相应

  进程返回

    成功返回0,否则非0

    shell中查看进程返回(echo $?)

自定义终止函数

#include <stdlib.h>int atexit(void(*function)(void))成功返回0,否则非0

 

 

一、进程与信号的结构