进程的组成部分
进程由地址空间和一部分内核数据结构所组成.地址空间是由内核标记出来供进程使用的一组内存页面.它包含进程正在执行的代码和库,进程变量,进程栈以及在进程运行时内核所需要的和种其它信息.
内核的数据结构记录了有关每个进程的各种信息,非常重要的信息有:
1\进程的地址空间映射; 2\进程的当前状态; 3\进程执行的优先级; 4\进程已用资源的信息; 5\进程已打开的文件和网络端口的信息; 6\进程的信号掩码; 7\进程的属主; |
注:
1\因为linux采用的是虚拟内存的系统,因为一个内存页面在进程的地址空间中的位置和它在机器中的物理内存和虚拟内存是没有关系的. 2\一个执行线程,它是在一个进程内执行一次fork的结果,线程继承了包含它的进程的许多属主(进程的地址空间),多个线程在同一个进程内按照一种称为多线程的机制并发执行; |
EUID\EGID:有效的用户\组ID,用来确定进程在任何给定的时刻对哪些资源和文件具有访问权限;
优先级:(-20~19)
进程的生命周期:
创建新进程:进程会用系统调用fork来复制自身,新进程拥有一个不同的PID和它自己的记帐信息.fork会返回两个值,从子进程的脚度来看返回0,而从父进程的脚度来看返回子进程的PID号.
死亡:当一个进程执行完毕后,它调用一个名为_exit的全程来通知内核,它提供一个退出码表明退出的原因,0表示正常的终止.内核会要求得到父进程的确认.父进程调用wait来确认,父进程接收子进程退出码的一个副本\通知.如果父进程先于子进程死亡,那么内核会使此父进程下的子进程接收为init的子进程.同样在消亡时执行所需wait调用清除它们;
信号:是进程级的中断请求;
1\作为一种通信手段在进程之间发送信号; 2\当键入特殊的按键时,如ctrl-c,可以由终端驱动程序发送信号去终止\中断\挂起进程. 3\由管理员发送信号来达到各种效果. 4\当进程出错,可以由内核发送信号; 5\可以由内核发送信号,通知一个进程有某种条件出现,比如一个子进程死亡或者在I/O通道上有数据; |
进程的状态:
1\可运行状态; 2\睡眠状态; 3\僵化状态; 4\停止状态; |
进程信息存储地:
/proc/$PID/ |
信号表:
HUP 终止进程 终端线路挂断 INT 终止进程 中断进程 QUIT 建立CORE文件终止进程,并且生成core文件 ILL 建立CORE文件 非法指令 TRAP 建立CORE文件 跟踪自陷 BUS 建立CORE文件 总线错误 SEGV 建立CORE文件 段非法错误 FPE 建立CORE文件 浮点异常 IOT 建立CORE文件 执行I/O自陷 KILL 终止进程 杀死进程 PIPE 终止进程 向一个没有读进程的管道写数据 ALARM 终止进程 计时器到时 TERM 终止进程 软件终止信号 STOP 停止进程 非终端来的停止信号 TSTP 停止进程 终端来的停止信号 CONT 忽略信号 继续执行一个停止的进程 URG 忽略信号 I/O紧急信号 IO 忽略信号 描述符上可以进行I/O CHLD 忽略信号 当子进程停止或退出时通知父进程 TTOU 停止进程 后台进程写终端 TTIN 停止进程 后台进程读终端 XGPU 终止进程 CPU时限超时 XFSZ 终止进程 文件长度过长 WINCH 忽略信号 窗口大小发生变化 PROF 终止进程 统计分布图用计时器到时 USR1 终止进程 用户定义信号1 USR2 终止进程 用户定义信号2 VTALRM 终止进程 虚拟计时器到时 |
用到的命令:
kill
top/ps/prstat/topas
nice/renice
strace/truss/tusc
fuser/lsof
RUN Test:
[root@nagios webbench-1.5]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
TOP: top - 18:41:57 up 1:11, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0 Mem: 1543132k total, 135096k used, 1408036k free, 8060k buffers Swap: 2031608k total, 0k used, 2031608k free, 40060k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7901 root 20 0 15024 1264 988 R 0.3 0.1 0:00.02 top 1 root 20 0 19228 1484 1216 S 0.0 0.1 0:01.47 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 7 root 20 0 0 0 0 S 0.0 0.0 0:03.55 events/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm [root@nagios webbench-1.5]# ls /proc/1280/ -l total 0 dr-xr-xr-x 2 apache apache 0 Apr 3 18:45 attr -rw-r--r-- 1 root root 0 Apr 3 18:45 autogroup -r-------- 1 root root 0 Apr 3 18:45 auxv -r--r--r-- 1 root root 0 Apr 3 18:45 cgroup --w------- 1 root root 0 Apr 3 18:45 clear_refs -r--r--r-- 1 root root 0 Apr 3 18:42 cmdline -rw-r--r-- 1 root root 0 Apr 3 18:45 coredump_filter -r--r--r-- 1 root root 0 Apr 3 18:45 cpuset lrwxrwxrwx 1 root root 0 Apr 3 18:44 cwd -> / -r-------- 1 root root 0 Apr 3 18:45 environ lrwxrwxrwx 1 root root 0 Apr 3 18:44 exe -> /usr/sbin/httpd dr-x------ 2 root root 0 Apr 3 18:44 fd dr-x------ 2 root root 0 Apr 3 18:44 fdinfo -r-------- 1 root root 0 Apr 3 18:45 io -rw------- 1 root root 0 Apr 3 18:45 limits -rw-r--r-- 1 root root 0 Apr 3 18:45 loginuid -r--r--r-- 1 root root 0 Apr 3 18:44 maps -rw------- 1 root root 0 Apr 3 18:45 mem -r--r--r-- 1 root root 0 Apr 3 18:45 mountinfo -r--r--r-- 1 root root 0 Apr 3 18:45 mounts -r-------- 1 root root 0 Apr 3 18:45 mountstats dr-xr-xr-x 7 apache apache 0 Apr 3 18:45 net -r--r--r-- 1 root root 0 Apr 3 18:45 numa_maps -rw-r--r-- 1 root root 0 Apr 3 18:45 oom_adj -r--r--r-- 1 root root 0 Apr 3 18:45 oom_score -rw-r--r-- 1 root root 0 Apr 3 18:45 oom_score_adj -r--r--r-- 1 root root 0 Apr 3 18:45 pagemap -r--r--r-- 1 root root 0 Apr 3 18:45 personality lrwxrwxrwx 1 root root 0 Apr 3 18:44 root -> / -rw-r--r-- 1 root root 0 Apr 3 18:45 sched -r--r--r-- 1 root root 0 Apr 3 18:45 schedstat -r--r--r-- 1 root root 0 Apr 3 18:45 sessionid -r--r--r-- 1 root root 0 Apr 3 18:45 smaps -r--r--r-- 1 root root 0 Apr 3 18:45 stack -r--r--r-- 1 root root 0 Apr 3 17:32 stat -r--r--r-- 1 root root 0 Apr 3 17:32 statm -r--r--r-- 1 root root 0 Apr 3 18:42 status -r--r--r-- 1 root root 0 Apr 3 18:45 syscall dr-xr-xr-x 3 apache apache 0 Apr 3 18:45 task -r--r--r-- 1 root root 0 Apr 3 18:45 wchan [root@nagios webbench-1.5]# cat /proc/1280/io rchar: 632 wchar: 0 syscr: 3 syscw: 0 read_bytes: 0 write_bytes: 0 cancelled_write_bytes: 0 [root@nagios webbench-1.5]# cat /proc/1280/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 10485760 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 11843 11843 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 11843 11843 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us |
参考<Unix/linux系统管理技术手册>