linux内核读书笔记(进程终止函数分析)三
do_exit() Function
-----------------------------------------------------------------------
kernel/exit.c
707 NORET_TYPE void do_exit(long code)
708 {
709 struct task_struct *tsk = current;
710
711 if (unlikely(in_interrupt()))
712 panic("Aiee, killing interrupt handler!");
713 if (unlikely(!tsk->pid))
714 panic("Attempted to kill the idle task!");
715 if (unlikely(tsk->pid == 1))
716 panic("Attempted to kill init!");
717 if (tsk->io_context)
718 exit_io_context();
719 tsk->flags |= PF_EXITING;
720 del_timer_sync(&tsk->real_timer);
721
722 if (unlikely(in_atomic()))
723 printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n",
724 current->comm, current->pid,
725 preempt_count());
-----------------------------------------------------------------------
Line 707参数code是进城返回给父进程的退出码 Lines 711716 确保目前进程不是一个中断处理进程,确保不是idle进程(PID=0)或者是init进程(PID=1),init进程只有系统被终止时才能退出; Line 719 将该进程的flags域设置为PF_EXITING,这表明当前进程被终止; -----------------------------------------------------------------------
kernel/exit.c
...
727 profile_exit_task(tsk);
728
729 if (unlikely(current->ptrace & PT_TRACE_EXIT)) {
730 current->ptrace_message = code;
731 ptrace_notify((PTRACE_EVENT_EXIT << 8) | SIGTRAP);
732 }
733
734 acct_process(code);
735 __exit_mm(tsk);
736
737 exit_sem(tsk);
738 __exit_files(tsk);
739 __exit_fs(tsk);
740 exit_namespace(tsk);
741 exit_thread();
...
-----------------------------------------------------------------------
Lines 729732 如果进程被ptraced而且PT_TRACE_EXIT 被设置,我们将exit_code作为消息通知父进程 Lines 735742 将进程中不用的资源clean up掉,__exit_mm()用于释放分配给进程的内存,和释放和此进程相关的mm_struct,exit_sem()将此任务从IPC中分离,__exit_files() 释放分配给任务的文件,并且将其标识符减去,_
相关文档:
一、准备工作
首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。启动Linux系统,并用根用户登录,进入终端模式下。
1、查看Linux内核版本
# uname -a
如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关 ......
今天把PHP环境换到LINUX里面来,用的是LD 9.12.1系统。linux很多安装跟配置都需要在终端环境下完成,虽然上次在YLMF OS里面安装过,可是那些代码还是记不清了。感谢因特网的力量,随手谷歌一下就基本上都找到了。现在将安装过程录下,方便下次的时候翻閲。
1.先下载xampp。在官方网站 ......
继续谈谈其它语言的开发。
3.2) 动态语言
这里指的是包括脚本语言,解释型语言在内的编程语言,例如Java,Perl,Python,PHP,JavaScript,Ruby,Shell Script,等等。
从开发环境角度看,动态语言都有自己的运行环境,而且通常都是跨平台的。因此,编写代码,调试运行则完全可以在自己的环境中完成,只是大多是命令行 ......
并发与竞态
解决竞态问题的途径是保证对共享资源的互斥访问。
访问共享资源的代码区域称为临界区,临界区需要以某种互斥机制加以保护。中断屏蔽、原子操作、自旋锁和信号量等是Linux设备驱动中可采用的互斥途径。
中断屏蔽
中断屏蔽将使得中断与进程之间的并发不再发生,而且,由于Linux内核的进程调度等操作都依赖 ......
【文档创建日期:2010-05-30】
001 // P122: 三、上机题 3
002
003 // test03-03.c
004
005 // Header files included.
006 #include <stdio.h>
00 ......