成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細解剖Linux進程管理

系統 Linux
本文給大家講解linux進程管理的辦法,例如:進程管理的分配有兩種方式。第一種方式是通過一個哈希表,第二種方式是通過雙鏈循環表。

學習進程時,你可能會遇到linux進程管理的問題,這里將介linux進程管理問題的解決方法,在這里拿出來和大家分享一下。

***進程數:在 Linux 內雖然進程都是動態分配的,但還是需要考慮***進程數。在內核內***進程數是由一個稱為 max_threads 的符號表示的,它可以在 ./linux/kernel/fork.c 內找到。可以通過 /proc/sys/kernel/threads-max 的 proc 文件系統從用戶空間更改此值。

現在,讓我們來看看如何在 Linux進程管理。在很多情況下,進程都是動態創建并由一個動態分配的 task_struct 表示。一個例外是 init 進程本身,它總是存在并由一個靜態分配的 task_struct 表示。在 ./linux/arch/i386/kernel/init_task.c 內可以找到這樣的一個例子。

Linux 內所有linux進程管理的分配有兩種方式。***種方式是通過一個哈希表,由 PID 值進行哈希計算得到;第二種方式是通過雙鏈循環表。循環表非常適合于對任務列表進行迭代。由于列表是循環的,沒有頭或尾;但是由于 init_task 總是存在,所以可以將其用作繼續向前迭代的一個錨點。讓我們來看一個遍歷當前任務集的例子。

任務列表無法從用戶空間訪問,但該問題很容易解決,方法是以模塊形式向內核內插入代碼。下面清單所示的是一個很簡單的程序,它會迭代任務列表并會提供有關每個任務的少量信息(name、pid 和 parent 名)。注意,在這里,此模塊使用 printk 來發出結果。要查看具體的結果,可以通過 cat 實用工具(或實時的 tail -f /var/log/messages)查看 /var/log/messages 文件。next_task 函數是 sched.h 內的一個宏,它簡化了任務列表的迭代(返回下一個任務的 task_struct 引用)。

清單:發出任務信息的簡單內核模塊(procsview.c)
#include
#include
#include
int init_module( void ){
/* Set up the anchor point */
struct task_struct *task = &init_task;
/* Walk through the task list, until we hit the init_task again */do {
printk( KERN_INFO "*** %s [%d] parent %s\n",
task->comm, task->pid, task->parent->comm );
} while ( (task = next_task(task)) != &init_task );
return 0;
}
void cleanup_module( void ){
return;}

可以用清單所示的 Makefile 編譯此模塊。在編譯時,可以用 insmod procsview.ko 插入模塊對象,也可以用 rmmod procsview 刪除它。

清單:用來構建內核模塊的 Makefile
obj-m += procsview.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
插入后,/var/log/messages 可顯示輸出,如下所示。從中可以看到,這里有一個空閑任務(稱為 swapper)和 init 任務(pid 1)。
Nov 12 22:19:51 mtj-desktop kernel: [8503.873310] *** swapper [0] parent swapper
Nov 12 22:19:51 mtj-desktop kernel: [8503.904182] *** init [1] parent swapper
Nov 12 22:19:51 mtj-desktop kernel: [8503.904215] *** kthreadd [2] parent swapper
Nov 12 22:19:51 mtj-desktop kernel: [8503.904233] *** migration/0 [3] parent kthreadd
...

注意,還可以標識當前正在運行的任務。Linux 維護一個稱為 current 的符號,代表的是當前運行的進程(類型是 task_struct)。如果在 init_module 的尾部插入如下這行代碼:
printk( KERN_INFO, "Current task is %s [%d], current->comm, current->pid );

會看到:
Nov 12 22:48:45 mtj-desktop kernel: [10233.323662] Current task is insmod [6538]

注意到,當前的任務是 insmod,這是因為 init_module 函數是在 insmod 命令執行的上下文運行的。current 符號實際指的是一個函數(get_current)并可在一個與 arch 有關的頭部中找到(比如 ./linux/include/asm-i386/current.h 內找到)。

【編輯推薦】

  1. Linux shell學習之:unix/linux shell的發展歷程
  2. Linux shell編程學習之一:什么是shell
  3. Linux系統實現SCSI硬盤熱插拔及在線識別步驟
  4. 輕松了解Linux打印之CUPS軟件
  5. 話說在win32下安裝linux虛擬機
責任編輯:薛輩輩 來源: linux
相關推薦

2009-11-24 09:39:55

SUSE Linux

2010-04-26 10:24:12

Oracle ASM

2010-05-20 14:14:56

2010-05-07 16:21:08

Oracle Raw類

2010-03-08 14:40:27

Linux進程調度

2011-01-11 13:47:27

Linux管理進程

2023-03-05 16:12:41

Linux進程線程

2010-02-25 10:28:43

Linux進程管理

2010-01-05 16:56:28

2023-03-02 23:50:36

Linux進程管理

2011-01-11 16:11:03

2010-06-11 16:57:37

Linux 查看進程

2009-12-15 18:27:51

Linux操作系統

2023-03-03 00:03:07

Linux進程管理

2014-08-01 15:38:37

Linux進程管理

2010-03-10 18:29:41

2009-12-23 13:17:36

Linux設備驅動

2011-01-18 11:15:19

LinuxLOG

2013-10-11 14:51:16

Linux進程管理

2021-04-15 05:51:25

Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩欧美二区 | 在线视频一区二区三区 | 亚洲免费一区二区 | 日韩在线观看视频一区 | 久久久成人一区二区免费影院 | 美女视频一区二区 | 日韩色图在线观看 | 久久久精品视频免费 | 精品蜜桃一区二区三区 | 亚洲一区二区在线播放 | 婷婷色国产偷v国产偷v小说 | 欧美不卡| 久久精品亚洲国产奇米99 | 91在线观看网址 | 奇米影视在线 | 久久剧场 | 人人干在线 | 中文字幕视频在线观看 | 国产91视频一区二区 | 亚洲 欧美 在线 一区 | 免费国产视频在线观看 | 日韩美女爱爱 | 国产精品免费小视频 | 国产成人99久久亚洲综合精品 | 国产精品国产精品国产专区不片 | 国产一区二区av | 蜜桃视频在线观看www社区 | 成人午夜网站 | 中文字幕亚洲一区 | 国产精品a一区二区三区网址 | 久久艹免费视频 | 天天天操天天天干 | 日本成人在线播放 | 老司机久久 | 欧美日韩亚洲国产综合 | 精品成人佐山爱一区二区 | 国产精品视频在 | 久久免费精品 | 毛片av免费在线观看 | 黄视频免费 | 天天躁日日躁狠狠躁2018小说 |