标签:
认识进程
ps -ef |more UID PID PPID C STIME TTY TIME CMD root 1 0 0 19:06 ? 00:00:04 /sbin/init auto noprompt root 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/linux ls sched.h vim sched.h vi 下搜索 进程指针结构体 :/task_struct 1380 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 file 1564 /* 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
标签:
原文地址:http://www.cnblogs.com/peixiguang/p/5812460.html