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,那恭喜你,闯关 ......
原文网址: http://www.dbanotes.net/arch/unix_linux_load.html
几乎每个接触类 Unix 操作系统的工程师都知道如何查看系统负载。但这东西的工作机理到底是怎样的,可能没有多少能说清楚。对比了一些相关信息,加上自己的理解,做一下笔记。
什么是 Load ? 什么是 Load Average ......
并发与竞态
解决竞态问题的途径是保证对共享资源的互斥访问。
访问共享资源的代码区域称为临界区,临界区需要以某种互斥机制加以保护。中断屏蔽、原子操作、自旋锁和信号量等是Linux设备驱动中可采用的互斥途径。
中断屏蔽
中断屏蔽将使得中断与进程之间的并发不再发生,而且,由于Linux内核的进程调度等操作都依赖 ......
编辑
$netbeans_home/etc/netbeans.conf,在"netbeans_default_options"项中添加"-J-
Dawt.useSystemAAFontSettings=on --fontsize=12"
p.s:让所有的Java程序都使用反锯
齿: export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on'
------------------------------------------------- ......
1. 内核学习方法,编译、调试等常见问题
1.1 关于编译升级内核到2.6.0的一些问题 作者:ommm
http://linux.chinaunix.net/bbs/thread-281831-1-5.html
1.2 VMWare Workstation 6.0调试Linux Kernel,竟如此方便 作者:albcamus
http://linux.chinaunix.net/bb ......