亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? exit.c

?? 帶中文注釋的linux 0.11源碼 很好
?? C
字號:
/** linux/kernel/exit.c** (C) 1991 Linus Torvalds*/#include <errno.h>		// 錯誤號頭文件。包含系統中各種出錯號。(Linus 從minix 中引進的)#include <signal.h>		// 信號頭文件。定義信號符號常量,信號結構以及信號操作函數原型。#include <sys/wait.h>		// 等待調用頭文件。定義系統調用wait()和waitpid()及相關常數符號。#include <linux/sched.h>	// 調度程序頭文件,定義了任務結構task_struct、初始任務0 的數據,// 還有一些有關描述符參數設置和獲取的嵌入式匯編函數宏語句。#include <linux/kernel.h>	// 內核頭文件。含有一些內核常用函數的原形定義。#include <linux/tty.h>		// tty 頭文件,定義了有關tty_io,串行通信方面的參數、常數。#include <asm/segment.h>	// 段操作頭文件。定義了有關段寄存器操作的嵌入式匯編函數。int sys_pause (void);int sys_close (int fd);//// 釋放指定進程(任務)。voidrelease (struct task_struct *p){  int i;  if (!p)    return;  for (i = 1; i < NR_TASKS; i++)	// 掃描任務數組,尋找指定任務。    if (task[i] == p)      {	task[i] = NULL;		// 置空該任務項并釋放相關內存頁。	free_page ((long) p);	schedule ();		// 重新調度。	return;      }  panic ("trying to release non-existent task");	// 指定任務若不存在則死機。}//// 向指定任務(*p)發送信號(sig),權限為priv。static inline intsend_sig (long sig, struct task_struct *p, int priv){// 若信號不正確或任務指針為空則出錯退出。  if (!p || sig < 1 || sig > 32)    return -EINVAL;// 若有權或進程有效用戶標識符(euid)就是指定進程的euid 或者是超級用戶,則在進程位圖中添加// 該信號,否則出錯退出。其中suser()定義為(current->euid==0),用于判斷是否超級用戶。  if (priv || (current->euid == p->euid) || suser ())    p->signal |= (1 << (sig - 1));  else    return -EPERM;  return 0;}//// 終止會話(session)。static voidkill_session (void){  struct task_struct **p = NR_TASKS + task;	// 指針*p 首先指向任務數組最末端。// 對于所有的任務(除任務0 以外),如果其會話等于當前進程的會話就向它發送掛斷進程信號。  while (--p > &FIRST_TASK)    {      if (*p && (*p)->session == current->session)	(*p)->signal |= 1 << (SIGHUP - 1);	// 發送掛斷進程信號。    }}/** XXX need to check permissions needed to send signals to process* groups, etc. etc. kill() permissions semantics are tricky!*//** 為了向進程組等發送信號,XXX 需要檢查許可。kill()的許可機制非常巧妙!*///// kill()系統調用可用于向任何進程或進程組發送任何信號。// 如果pid 值>0,則信號被發送給pid。// 如果pid=0,那么信號就會被發送給當前進程的進程組中的所有進程。// 如果pid=-1,則信號sig 就會發送給除第一個進程外的所有進程。// 如果pid < -1,則信號sig 將發送給進程組-pid 的所有進程。// 如果信號sig 為0,則不發送信號,但仍會進行錯誤檢查。如果成功則返回0。intsys_kill (int pid, int sig){  struct task_struct **p = NR_TASKS + task;  int err, retval = 0;  if (!pid)    while (--p > &FIRST_TASK)      {	if (*p && (*p)->pgrp == current->pid)	  if (err = send_sig (sig, *p, 1))	    retval = err;      }  else if (pid > 0)    while (--p > &FIRST_TASK)      {	if (*p && (*p)->pid == pid)	  if (err = send_sig (sig, *p, 0))	    retval = err;      }  else if (pid == -1)    while (--p > &FIRST_TASK)      if (err = send_sig (sig, *p, 0))	retval = err;      else	while (--p > &FIRST_TASK)	  if (*p && (*p)->pgrp == -pid)	    if (err = send_sig (sig, *p, 0))	      retval = err;  return retval;}//// 通知父進程 -- 向進程pid 發送信號SIGCHLD:子進程將停止或終止。// 如果沒有找到父進程,則自己釋放。static voidtell_father (int pid){  int i;  if (pid)    for (i = 0; i < NR_TASKS; i++)      {	if (!task[i])	  continue;	if (task[i]->pid != pid)	  continue;	task[i]->signal |= (1 << (SIGCHLD - 1));	return;      }/* if we don't find any fathers, we just release ourselves *//* This is not really OK. Must change it to make father 1 */  printk ("BAD BAD - no father found\n\r");  release (current);		// 如果沒有找到父進程,則自己釋放。}//// 程序退出處理程序。在系統調用的中斷處理程序中被調用。intdo_exit (long code)		// code 是錯誤碼。{  int i;// 釋放當前進程代碼段和數據段所占的內存頁(free_page_tables()在mm/memory.c,105 行)。  free_page_tables (get_base (current->ldt[1]), get_limit (0x0f));  free_page_tables (get_base (current->ldt[2]), get_limit (0x17));// 如果當前進程有子進程,就將子進程的father 置為1(其父進程改為進程1)。如果該子進程已經// 處于僵死(ZOMBIE)狀態,則向進程1 發送子進程終止信號SIGCHLD。  for (i = 0; i < NR_TASKS; i++)    if (task[i] && task[i]->father == current->pid)      {	task[i]->father = 1;	if (task[i]->state == TASK_ZOMBIE)/* assumption task[1] is always init */	  (void) send_sig (SIGCHLD, task[1], 1);      }// 關閉當前進程打開著的所有文件。  for (i = 0; i < NR_OPEN; i++)    if (current->filp[i])      sys_close (i);// 對當前進程工作目錄pwd、根目錄root 以及運行程序的i 節點進行同步操作,并分別置空。  iput (current->pwd);  current->pwd = NULL;  iput (current->root);  current->root = NULL;  iput (current->executable);  current->executable = NULL;// 如果當前進程是領頭(leader)進程并且其有控制的終端,則釋放該終端。  if (current->leader && current->tty >= 0)    tty_table[current->tty].pgrp = 0;// 如果當前進程上次使用過協處理器,則將last_task_used_math 置空。  if (last_task_used_math == current)    last_task_used_math = NULL;// 如果當前進程是leader 進程,則終止所有相關進程。  if (current->leader)    kill_session ();// 把當前進程置為僵死狀態,并設置退出碼。  current->state = TASK_ZOMBIE;  current->exit_code = code;// 通知父進程,也即向父進程發送信號SIGCHLD -- 子進程將停止或終止。  tell_father (current->father);  schedule ();			// 重新調度進程的運行。  return (-1);			/* just to suppress warnings */}//// 系統調用exit()。終止進程。intsys_exit (int error_code){  return do_exit ((error_code & 0xff) << 8);}//// 系統調用waitpid()。掛起當前進程,直到pid 指定的子進程退出(終止)或者收到要求終止// 該進程的信號,或者是需要調用一個信號句柄(信號處理程序)。如果pid 所指的子進程早已// 退出(已成所謂的僵死進程),則本調用將立刻返回。子進程使用的所有資源將釋放。// 如果pid > 0, 表示等待進程號等于pid 的子進程。// 如果pid = 0, 表示等待進程組號等于當前進程的任何子進程。// 如果pid < -1, 表示等待進程組號等于pid 絕對值的任何子進程。// [ 如果pid = -1, 表示等待任何子進程。]// 若options = WUNTRACED,表示如果子進程是停止的,也馬上返回。// 若options = WNOHANG,表示如果沒有子進程退出或終止就馬上返回。// 如果stat_addr 不為空,則就將狀態信息保存到那里。intsys_waitpid (pid_t pid, unsigned long *stat_addr, int options){  int flag, code;  struct task_struct **p;  verify_area (stat_addr, 4);repeat:  flag = 0;  for (p = &LAST_TASK; p > &FIRST_TASK; --p)    {				// 從任務數組末端開始掃描所有任務。      if (!*p || *p == current)	// 跳過空項和本進程項。	continue;      if ((*p)->father != current->pid)	// 如果不是當前進程的子進程則跳過。	continue;      if (pid > 0)	{			// 如果指定的pid>0,但掃描的進程pid	  if ((*p)->pid != pid)	// 與之不等,則跳過。	    continue;	}      else if (!pid)	{			// 如果指定的pid=0,但掃描的進程組號	  if ((*p)->pgrp != current->pgrp)	// 與當前進程的組號不等,則跳過。	    continue;	}      else if (pid != -1)	{			// 如果指定的pid<-1,但掃描的進程組	  號if ((*p)->pgrp != -pid)	// 與其絕對值不等,則跳過。	    continue;	}      switch ((*p)->state)	{	case TASK_STOPPED:	  if (!(options & WUNTRACED))	    continue;	  put_fs_long (0x7f, stat_addr);	// 置狀態信息為0x7f。	  return (*p)->pid;	// 退出,返回子進程的進程號。	case TASK_ZOMBIE:	  current->cutime += (*p)->utime;	// 更新當前進程的子進程用戶	  current->cstime += (*p)->stime;	// 態和核心態運行時間。	  flag = (*p)->pid;	  code = (*p)->exit_code;	// 取子進程的退出碼。	  release (*p);		// 釋放該子進程。	  put_fs_long (code, stat_addr);	// 置狀態信息為退出碼值。	  return flag;		// 退出,返回子進程的pid.	default:	  flag = 1;		// 如果子進程不在停止或僵死狀態,則flag=1。	  continue;	}    }  if (flag)    {				// 如果子進程沒有處于退出或僵死狀態,      if (options & WNOHANG)	// 并且options = WNOHANG,則立刻返回。	return 0;      current->state = TASK_INTERRUPTIBLE;	// 置當前進程為可中斷等待狀態。      schedule ();		// 重新調度。      if (!(current->signal &= ~(1 << (SIGCHLD - 1))))	// 又開始執行本進程時,	goto repeat;		// 如果進程沒有收到除SIGCHLD 的信號,則還是重復處理。      else	return -EINTR;		// 退出,返回出錯碼。    }  return -ECHILD;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精工是国产品牌吗| 国产999精品久久久久久绿帽| 精品日韩99亚洲| 成人中文字幕在线| 视频一区免费在线观看| 久久久精品国产免费观看同学| 欧美在线观看你懂的| 国产成人免费在线观看| 视频一区二区中文字幕| 亚洲精品自拍动漫在线| 久久青草国产手机看片福利盒子 | 九色|91porny| 一区二区三区四区在线播放| 国产三级一区二区| 欧美一级精品大片| 欧美视频中文字幕| 不卡一二三区首页| 国产精品一区专区| 麻豆精品在线播放| 日韩av成人高清| 一区二区久久久久久| 国产精品拍天天在线| 久久夜色精品一区| 欧美一区二区美女| 日本精品视频一区二区| 高清视频一区二区| 国产精品一区二区无线| 另类欧美日韩国产在线| 婷婷六月综合网| 一区二区久久久久久| 亚洲视频中文字幕| 中文字幕一区二区三区乱码在线| 2023国产精品自拍| 久久综合色8888| 精品一区二区影视| 中文字幕亚洲区| 精品成人在线观看| 欧美视频在线不卡| 在线观看视频欧美| 在线这里只有精品| 欧美性猛交xxxxxx富婆| 国产成人av影院| 麻豆国产精品视频| 免费欧美日韩国产三级电影| 亚洲超丰满肉感bbw| 亚洲电影你懂得| 日韩国产欧美在线播放| 日韩精品一二区| 免费高清在线一区| 蜜桃视频在线一区| 精品一区二区三区免费播放| 高清不卡在线观看| 99re热这里只有精品视频| 91在线观看视频| 在线观看日产精品| 在线电影一区二区三区| 日韩欧美中文字幕制服| 精品美女在线播放| 久久精品一区二区| 国产精品理伦片| 亚洲小说欧美激情另类| 五月天国产精品| 精品亚洲国产成人av制服丝袜| 国产一区二三区好的| 国产.精品.日韩.另类.中文.在线.播放| 成人av在线资源网| 在线一区二区观看| 欧美一区二区免费视频| 久久久噜噜噜久久中文字幕色伊伊 | 欧美久久久久久久久| 日韩午夜精品视频| 国产视频一区在线播放| 亚洲欧美综合另类在线卡通| 一区二区三区不卡视频在线观看| 亚洲大片一区二区三区| 久久国产人妖系列| 91色porny| 日韩欧美国产精品一区| 亚洲欧洲精品成人久久奇米网| 亚洲国产成人av| 国产一区在线精品| 在线看国产一区| 欧美精品一区二区不卡| 亚洲视频一区在线| 久久精品国产亚洲高清剧情介绍| 国产suv精品一区二区三区| 欧美日韩在线三级| 久久亚洲私人国产精品va媚药| 国产精品国产三级国产aⅴ入口 | 2017欧美狠狠色| 亚洲激情网站免费观看| 九色|91porny| 欧美性受xxxx黑人xyx性爽| 精品精品国产高清一毛片一天堂| 亚洲日本乱码在线观看| 免费观看在线综合色| 9久草视频在线视频精品| 日韩欧美国产一区在线观看| 国产精品高潮呻吟久久| 精品一区二区影视| 色先锋aa成人| 久久九九久久九九| 五月婷婷激情综合| 91麻豆国产福利精品| 国产亚洲污的网站| 五月天亚洲精品| 99re这里都是精品| 久久综合狠狠综合久久综合88| 亚洲高清免费一级二级三级| 9久草视频在线视频精品| 精品1区2区在线观看| 婷婷国产v国产偷v亚洲高清| 波多野结衣中文一区| 日韩女优毛片在线| 天堂成人免费av电影一区| 91丨九色丨国产丨porny| 久久久不卡影院| 国产永久精品大片wwwapp | 国产精品三级视频| 美女网站色91| 91精品免费在线观看| 亚洲一区视频在线| 91免费观看视频在线| 亚洲欧洲性图库| 国产高清视频一区| 精品剧情v国产在线观看在线| 五月天激情小说综合| 欧美主播一区二区三区美女| 中文字幕视频一区二区三区久| 国产白丝精品91爽爽久久 | 欧美一区二区三区视频免费| 亚洲国产一区二区三区| 91看片淫黄大片一级| ●精品国产综合乱码久久久久| 成人黄色在线网站| 国产精品剧情在线亚洲| 99国内精品久久| 成人欧美一区二区三区在线播放| 成人一道本在线| 1000部国产精品成人观看| www.激情成人| 国产精品久久久久久户外露出 | 国产a区久久久| 日本一区二区三区四区| 成人在线视频首页| 国产精品久久久爽爽爽麻豆色哟哟| 成人性视频免费网站| 国产精品久久久久久久第一福利 | 日韩欧美综合在线| 奇米影视一区二区三区| 4438x亚洲最大成人网| 肉丝袜脚交视频一区二区| 91精品国产欧美日韩| 日本va欧美va精品| 精品国产乱码久久久久久浪潮| 国产在线不卡视频| 中文字幕在线观看不卡| 91麻豆国产自产在线观看| 午夜电影一区二区| 91精品国产一区二区三区| 精品一区二区综合| 国产三级久久久| 91日韩在线专区| 日韩1区2区日韩1区2区| 26uuu成人网一区二区三区| 国产成人欧美日韩在线电影| 亚洲精选免费视频| 91精品免费在线观看| 国产成人av电影在线观看| 亚洲免费看黄网站| 91精品国产日韩91久久久久久| 国产一区二区三区美女| 亚洲人成7777| 日韩女优毛片在线| av在线不卡电影| 日韩电影在线一区二区三区| 久久久99精品久久| 欧美在线看片a免费观看| 精品午夜久久福利影院 | 亚洲人成人一区二区在线观看| 欧美日本国产一区| 国产精一品亚洲二区在线视频| 亚洲男帅同性gay1069| 日韩亚洲欧美综合| 一本色道久久综合亚洲精品按摩| 日本vs亚洲vs韩国一区三区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩精品中文字幕在线不卡尤物 | 国产精品欧美极品| 欧美综合色免费| 国产一区二区女| 亚洲成人在线网站| 久久久精品黄色| 欧美日韩高清影院| 成人精品国产福利| 天堂成人国产精品一区| 亚洲视频免费看| 精品日韩在线观看| 欧美亚洲国产一区在线观看网站| 国产一区二区伦理片|