linuxat工作隊列
Ⅰ linux 工作隊列和等待隊列的區別
work queue是一種bottom half,中斷處理的後半程,強調的是動態的概念,即work是重點,而queue是其次。
wait queue是一種「任務隊列」,可以把一些進程放在上面睡眠等待某個事件,強調靜態多一些,重點在queue上,即它就是一個queue,這個queue如何調度,什麼時候調度並不重要
等待隊列在內核中有很多用途,尤其適合用於中斷處理,進程同步及定時。這里只說,進程經常必須等待某些事件的發生。例如,等待一個磁碟操作的終止,等待釋放系統資源,或者等待時間經過固定的間隔。
等待隊列實現了在事件上的條件等待,希望等待特定事件的進程把放進合適的等待隊列,並放棄控制權。因此。等待隊列表示一組睡眠的進程,當某一條件為真時,由內核喚醒進程。
等待隊列由循環鏈表實現,其元素包括指向進程描述符的指針。每個等待隊列都有一個等待隊列頭,等待隊列頭是一個類型為wait_queue_head_t的數據結構。
等待隊列鏈表的每個元素代表一個睡眠進程,該進程等待某一事件的發生,描述符地址存放在task欄位中。然而,要喚醒等待隊列中所有的進程有時並不方便。例如,如果兩個或多個進程在等待互斥訪問某一個要釋放的資源,僅喚醒等待隊列中一個才有意義。這個進程佔有資源,而其他進程繼續睡眠可以用DECLARE_WAIT_QUEUE_HEAD(name)宏定義一個新的等待隊列,該宏靜態地聲明和初始化名為name的等待隊列頭變數。 init_waitqueue_head()函數用於初始化已動態分配的wait queue head變數等待隊列可以通過DECLARE_WAITQUEUE()靜態創建,也可以用init_waitqueue_head()動態創建。進程放入等待隊列並設置成不可執行狀態。
工作隊列,workqueue,它允許內核代碼來請求在將來某個時間調用一個函數。用來處理不是很緊急事件的回調方式處理方法.工作隊列的作用就是把工作推後,交由一個內核線程去執行,更直接的說就是寫了一個函數,而現在不想馬上執行它,需要在將來某個時刻去執行,那就得用工作隊列准沒錯。
如果需要用一個可以重新調度的實體來執行下半部處理,也應該使用工作隊列。是唯一能在進程上下文運行的下半部實現的機制。這意味著在需要獲得大量的內存時、在需要獲取信號量時,在需要執行阻塞式的I/O操作時,都會非常有用。
Ⅱ linux.at 命令怎麼用
一次性定時計劃任務的at命令的用法!
1.命令格式:
at[參數][時間]
2.命令功能:
在一個指定的時間執行一個指定任務,只能執行一次,且需要開啟atd進程(
ps -ef | grep atd查看, 開啟用/etc/init.d/atd start or restart; 開機即啟動則需要運行 chkconfig --level 2345 atd on)。
3.命令參數:
-m 當指定的任務被完成之後,將給用戶發送郵件,即使沒有標准輸出
-I atq的別名
-d atrm的別名
-v 顯示任務將被執行的時間
-c 列印任務的內容到標准輸出
-V 顯示版本信息
-q<列隊> 使用指定的列隊
-f<文件> 從指定文件讀入任務而不是從標准輸入讀入
-t<時間參數> 以時間參數的形式提交要運行的任務 《Linux就該這么學》
使用實例:
實例1:三天後的下午 5 點鍾執行 /bin/ls
命令:
at 5pm+3 days
輸出:
[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at> <EOT>
job 7 at 2013-01-08 17:00
[root@localhost ~]#
說明:
實例2:明天17點鍾,輸出時間到指定文件內
命令:
at 17:20 tomorrow
輸出:
[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2013.log
at> <EOT>
job 8 at 2013-01-06 17:20
Ⅲ linux 設置at調度。要求如下:
1.at調度
]# at 23:59 2020-12-31
at> wall happy new year!
at> <EOF>
2.查看at調度信息
]# atq
3.修改系統日期
]#date -s "2020-12-31 23:58:00"
Ⅳ linux 內核中,工作隊列和線程有什麼區別
一句話概括:根本就是兩個不同的概念,差別很大。
簡單的說:
一般來說,線程是windows上的概念,windows區分進程和線程。而在linux上,統一叫進程,進程是完成某項任務所需資源的集合,同時也是linux基本的執行單元。
工作隊列是一個等待被執行的任務鏈表,由專有的線程來調度、執行。很多linux驅動的中斷下半部的實現,都是採用工作隊列的方式。
作者:陳彬
鏈接:
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
Ⅳ Linux怎樣在某一特定時間執行命令(使用at」
簡介
at定時任務,指定一個時間執行一個任務,只能執行一次。需要安裝at服務,apt-get install at;
創建at任務
創建at任務方式有兩種,從文件輸入和從控制台輸入。以下分別用兩種方式創建1分鍾後將當前時間寫入 home/result 文件的命令
1、從文件輸入
附錄
1、at時間定義
at允許使用一套相當復雜的指定時間的方法。
1)能夠接受在當天的hh:mm(小時:分鍾)式的時間指定。假如該時間已過去,那麼就放在第二天執行。例如:04:00
2)能夠使用midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午4點)等比較模糊的詞語來指定時間。
3)能夠採用12小時計時制,即在時間後面加上AM(上午)或PM(下午)來說明是上午還是下午。例如:12pm
4)能夠指定命令執行的具體日期,指定格式為month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必須跟在指定時間的後面。例如:04:00 2009-03-1
5)能夠使用相對計時法。指定格式為:now + count time-units ,now就是當前時間,time-units是時間單位,這里能夠是minutes(分鍾)、hours(小時)、days(天)、weeks(星期)。count是時間的數量,幾天,幾小時。例如:now + 5 minutes 04pm + 3 days
6)能夠直接使用today(今天)、tomorrow(明天)來指定完成命令的時間。
Ⅵ linux中at命令
linux
at
命令詳解
使用方式
:
at
-V
[-q
queue]
[-f
file]
[-mldbv]
TIME
說明
:
at
可以讓使用者指定在
TIME
這個特定時刻執行某個程序或指令,TIME
的格式是
HH:MM其中的
HH
為小時,MM
為分鍾,甚至你也可以指定
am,
pm,
midnight,
noon,
teatime(就是下午
4
點鍾)等口語詞。
如果想要指定超過一天內的時間,則可以用
MMDDYY
或者
MM/DD/YY
的格式,其中
MM
是分鍾,DD
是第幾日,YY
是指年份。另外,使用者甚至也可以使用像是
now
+
時間間隔來彈性指定時間,其中的時間間隔可以是
minutes,
hours,
days,
weeks。
另外,使用者也可指定
today
或
tomorrow
來表示今天或明天。當指定了時間並按下
enter
之後,at
會進入交談模式並要求輸入指令或程序,當你輸入完後按下
ctrl+D
即可完成所有動作,至於執行的結果將會寄回你的帳號中。
參數
:
-V
:
印出版本編號
-q
:
使用指定的佇列(Queue)來儲存,at
的資料是存放在所謂的
queue
中,使用者可以同時使用多個
queue,而
queue
的編號為
a,
b,
c...
z
以及
A,
B,
...
Z
共
52
個
-m
:
即使程序/指令執行完成後沒有輸出結果,
也要寄封信給使用者
-f
file
:
讀入預先寫好的命令檔。使用者不一定要使用交談模式來輸入,可以先將所有的指定先寫入檔案後再一次讀入
-l
:
列出所有的指定
(使用者也可以直接使用
atq
而不用
at
-l)
-d
:
刪除指定
(使用者也可以直接使用
atrm
而不用
at
-d)
-v
:
列出所有已經完成但尚未刪除的指定
Ⅶ 求Linux大神,at設置指令執行時間, 要求:通過標准輸入:如在2011年4月9日9點向用戶郵箱發送以問候信息
Linux用戶任務操作系統用戶用戶同間使用電腦系統任務Linux執行任務同任務沒落實執行另項任務
操作系統管理用戶任務要求數系統都CPU主存儲器系統能二級存儲磁碟輸入/輸設備操作系統管理些資源資源共享用戶間造提請求種錯覺像獨自占據事實操作系統等待執行監視任務隊列些任務包括用戶工作操作系統任務電郵件列印作業操作系統根據每任務優先順序每任務配合適間片每間片約零點幾秒雖看起短其實足夠計算機完千萬指令集每任務都系統運行段間掛機系統轉向其任務;段間處理任務直任務完任務隊列刪除
跑東西Linux系統流程作業稱程每用戶任務每系統管理守護程序稱程 Linux管理使所任務共享系統資源我所關何控制些程讓客戶服務
程更式定義:獨立程序運行自虛擬址空間流程程序區別該程程序雖由程序程序靜態指令集合占系統資源操作程隨能發變化態使用系統資源運行程序程序啟進程
操作程概念同執行進程稱作業作業包含或進程尤其使用管道重定向命令
作業控制運行進程行進行控制例用戶暫停程稍等片刻繼續程 shell啟程每進程程所記錄用戶隨所欲掛起進程或重新啟該進程作業控制許shell(包括bashtcsh)特點允許用戶間進行切換獨立業務
例用戶編輯文本文件並需要止編輯做其事情利用作業控制用戶讓編輯器暫掛起並返shell提示符始做其事情做其事情重新啟掛起編輯器返剛停用戶離編輯器僅僅例作業控制其實際用途
啟進程
類型需要運行程序程序名執行程序其實啟進程Linux系統每進程都用於系統識別調度進程進程號主要兩種式啟進程:手啟調度啟預先設定根據用戶要求始自
1手啟
直接輸入用戶命令啟進程手啟該進程手啟該進程始前台台啟
前台啟手啟進程見式般情況用戶鍵入命令ls-升啟程前台進程系統已經狀態程許些用戶能困惑:我啟進程實際台運行系統啟自啟進程悄悄運行些用戶快速鍵入ls-l命令PS-X查看並沒看ls程覺奇怪事實結束進程LS太快使用ps看該進程已經執行結束
直接台手工啟進程用除非程非耗用戶急於結必要假設用戶要始期運行程格式化文本文件使整shell格式化程癱瘓狀態明智選擇台啟進程
2調度啟
需要些更耗費間資源密集型維護工作該系統適合半夜候用戶提前安排指定任務運行間或場合間系統自完所些工作自啟程需要啟命令
用戶命令指定間執行指定命令序列第重要命令命令其說命令至少需要指定命令執行間運行命令允許您指定間指定期間請注意指定間歧視問題 :現用戶指定執行間:3:20早晨發命令前晚20:00究竟執行命令期用戶仍工作前3: 20則該命令候完退工作狀態用戶3:20前該命令執行第二清晨命令語:
[-V] [-Q隊列] [-f文件名] [-mldbv]間
AT-C工作[工作]
>允許使用非復雜指定間接受hh:mm(:鍾)指定間間已第二執行用於午夜(深夜)午(午)更晦澀難懂午茶(午茶間通16:00)指定間用戶使用12制面間AM(午)或PM(午)說明午或午指定命令執行指定期格式月份(月)或MM / DD / YY(月//)或DD.MM.YY(月)指定期必須遵循面指定間
述絕計其實使用相計錯要執行命令安排指定格式:+計單位現前間間單位單位間鍾(鍾)數(h)數()周(周)計數間量論幾或幾等等
序用於直接指定命令完今(今)明(明)面些例說明具體用假設現間
[例]今午5:30指定執行命令 2月24午12:30,2001命令格式:
午5:30
17:30
今17:30
現+ 5
現+ 300鍾
17:30 24.2.99
17:30 2/24/99
17:30 2月24
些命令表達更重要意義完全所間完全自由選擇根據喜情況般採用絕間24鍾避免導致序錯誤發由於用戶自疏忽例面例寫:
17:30 2/24/99
清楚其理解
at命令自執行命令標准輸入或使用-f選項指定文件讀取執行命令使用su命令切換用戶shell則前用戶認執行用戶所錯誤輸發送用戶發送電郵件收消息原用戶登錄shell所者作業文件工作7月31午10許
任何情況超級用戶使用命令於其用戶否使用取決於兩文件:/ etc / at.allow/ etc / at.deny
cron命令<BR /述兩命令完某些任務定間內要知道能執行換句說指定運行命令系統完任務指定間切都結束許情況需要重復幾命令:家公司自報告員工公司星期第周候需要使用完任務cron命令cron命令應手啟cron命令系統啟自啟進入台(所沒必要使用符號(&))用戶沒許可權運行該命令由shell腳本雖超用戶手啟cron建議由系統自行啟shell腳本
cron命令搜索找/ var / spool / cron內目錄用戶名/ etc / passwd文件名crontab文件文件發現載入內存例用戶名狡猾用戶所應crontab文件/ var / spool / cron內/狡猾換句說用戶名crontab文件存儲/ var / spool / cron內目錄搜索/ etc / crontab文件寫同格式cron命令cron啟首先檢查用戶否設置crontab文件轉移休眠狀態釋放系統資源台進程佔用資源非少每鍾醒隨著間推移看否前需要運行命令執行命令任何輸發送電郵件crontab所者或者/ etc / crontab文件MAILTO環境變數指定用戶面簡單介紹些cron cron命令執行工作原理需要用戶干預要求用戶順序執行crontab命令面crontab命令
crontab命令用於安裝刪除crontab命令或列表形式用驅cron守護進程換句說用戶需要執行命令序列crontab文件執行每用戶都自crontab文件面看看何創建crontab文件/ VAR / spool / cron內crontab文件能直接創建或crontab文件crontab命令現假設用戶名狡猾需要創建自crontab文件首先使用任何文本編輯器創建新文檔向其寫入需要運行定期要執行命令保存並退假設文件/ tmp / test.cron使用crontab命令文件安裝用戶crontab文件類型: crontab test.cron
創建crontab文件/ var / spool / cron內目錄看看發現狡猾文件文件必需crontab文件
何crontab文件輸入要執行命令間文件每行由六域其前五欄位指定命令執行間域要執行命令使用每域間空格或製表符隔格式:
鍾月月周命令
第二第鍾3月第四今前幾月周第五第六要執行命令些項目能空必須填補需要指定些些用*代替*通配符代替任何字元所任何間忽略計
程暫停恢復命令允許進程暫停恢復程BG FG
作業控制需要運行待業復甦流產始繼續運行鍵盤按ctrl + Z掛起前前台作業鍵盤按CTRL + Z暫停前執行命令cat使用jobs命令顯示列表操作外殼包括具體工作工作數量工作電流狀態執行恢復程兩選項:作業掛起fg命令放前台操作bg命令台始掛起靈使用該命令帶極便
進程查看器
由於Linux用戶系統候要解其用戶現做Linux進程系統部署管理些程往往需要管理程:首先我必須知道底程程等程必要查看工作
命令
命令主要用於查看前線用戶命令非用用戶希望創建即消息其用戶使用talk命令必須首先確定用戶網做或談程能立系統管理員希望監視每登錄用戶刻行使用誰命令誰命令應用程序非簡單更准確握用戶情況廣泛使用
w命令
命令用於顯示登錄系統用戶誰w命令功能更強僅誰登錄系統顯示些用戶工作進展並統計相更詳細科增強版本w命令誰命令命令w命令顯示項目按順序:前間系統啟現間記錄數量用戶該系統1秒5秒15秒平均負載每用戶數據該項目顯示順序間指:登錄帳號終端名稱遠程主機名登錄間空閑間JCPUPCPU前運行進程命令行JCPU所花費間終端(tty)連接所進程候包括台作業包括前運行台作業所佔用間PCPU間指由前進程所佔用間(即程序)項目
ps命令 BR /> ps命令基本命令非強進程查看器使用命令決定哪些進程運行運行狀態程僵屍進程哪些進程佔用資源等等總數信息通執行命令
ps命令用監控台進程工作台進程溝通些標准屏幕鍵盤輸入/輸設備所需要檢測其狀態使用ps命令
ps [選項]
面命令選項說明:
>
-E顯示所進程
-F格式
h顯示標題
- L格式
-W寬輸
顯示終端進程包括其用戶進程
R運行進程
X顯示沒控制終端進程
O [+ | - ] K1 [+ | - ] K2 [...]]短按鍵K1 K2快捷鍵指定級排序順序進程列表詩同格式指定預設值些默認順序由用戶指定覆蓋面+字元選其向 - 字元反轉指定鍵
用三參數UX
top命令
top命令ps命令相同顯示目前流程其條件頂部態程即通用戶按鍵刷新前狀態前台執行該命令獨占前台直用戶終止程序更准確說top命令提供實監控系統處理器狀態顯示系統CPU敏任務列表該命令按CPU使用內存使用率執行間任務進行排序;許互動式命令或者定製文件命令集特點
進程調度
需要斷前台進程通使用至於理由要殺背景按Ctrl + C組合鍵於台進程恐怕組合鍵解決必須打kill命令該命令終止台進程程所消耗程許太CPU間許程已經掛總種情況經發
kill命令發送指定信號給進程結束程發送信號指定則默認值TERM信號TERM信號終止所進程永遠能捕捉信號誰捕捉信號程能需要使用kill(9)信號信號能捕獲
kill命令語簡單基本兩種式:
殺[-s信號|-P] [-a〕進程ID ...
殺-L [信號]
Ⅷ 如何使用Linux工作隊列workqueue
創建一個per-CPU *編譯期間靜態創建一個per-CPU DEFINE_PER_CPU(type, name) 創建一個名為name,數據類型為type的per-CPU,比如static DEFINE_PER_CPU(struct sk_buff_head, bs_cpu_queues),此時每個CPU都有一個名叫bs_cpu_queues,數據結構為sk_buff_head的變數副本。每個副本都是在自己的CPU上工作。 * 動態創建per-CPU,以下代碼是內核create_workqueue實現的片斷 struct workqueue_struct *__create_workqueue(const char *name, int singlethread) { int cpu, destroy = 0; struct workqueue_struct *wq; struct task_struct *p; wq = kzalloc(sizeof(*wq), GFP_KERNEL); if (!wq) return NULL; wq->cpu_wq = alloc_percpu(struct cpu_workqueue_struct); if (!wq->cpu_wq) { kfree(wq); return NULL; } …… }創建一個名為name,數據類型為type的per-CPU,比如static DEFINE_PER_CPU(struct sk_buff_head, bs_cpu_queues),此時每個CPU都有一個名叫bs_cpu_queues,數據結構為sk_buff_head的變數副本。每個副本都是在自己的CPU上工作。Linux 2.6內核使用了不少工作隊列來處理任務,他在使用上和 tasklet最大的不同是工作隊列的函數可以使用休眠,而tasklet的函數是不允許使用休眠的。工作隊列的使用又分兩種情況,一種是利用系統共享的工作隊列來添加自己的工作,這種情況處理函數不能消耗太多時間,這樣會影響共享隊列中其他任務的處理;另外一種是創建自己的工作隊列並添加工作。第二步:創建一個工作結構體變數,並將處理函數和參數的入口地址賦給這個工作結構體變數如果不想要在編譯時就用DECLARE_WORK()創建並初始化工作結構體變數,也可以在程序運行時再用INIT_WORK()創建struct work_struct my_work; //創建一個名為my_work的結構體變數,創建後才能使用INIT_WORK()INIT_WORK(&my_work,my_func,&data); //初始化已經創建的my_work,其實就是往這個結構體變數中添加處理函數的入口地址和data的地址,通常在驅動的open函數中完成INIT_WORK(&my_work, my_func, &data); //創建一個工作結構體變數並初始化,和第一種情況的方法一樣//作用與schele_work()類似,不同的是將工作添加入p_queue指針指向的工作隊列而不是系統共享的工作隊列work queue是一種bottom half,中斷處理的後半程,強調的是動態的概念,即work是重點,而queue是其次。wait queue是一種「任務隊列」,可以把一些進程放在上面睡眠等待某個事件,強調靜態多一些,重點在queue上,即它就是一個queue,這個queue如何調度,什麼時候調度並不重要等待隊列在內核中有很多用途,尤其適合用於中斷處理,進程同步及定時。這里只說,進程經常必須等待某些事件的發生。例如,等待一個磁碟操作的終止,等待釋放系統資源,或者等待時間經過固定的間隔。等待隊列實現了在事件上的條件等待,希望等待特定事件的進程把放進合適的等待隊列,並放棄控制權。因此。等待隊列表示一組睡眠的進程,當某一條件為真時,由內核喚醒進程。等待隊列由循環鏈表實現,其元素包括指向進程描述符的指針。每個等待隊列都有一個等待隊列頭,等待隊列頭是一個類型為wait_queue_head_t的數據結構。等待隊列鏈表的每個元素代表一個睡眠進程,該進程等待某一事件的發生,描述符地址存放在task欄位中。然而,要喚醒等待隊列中所有的進程有時並不方便。例如,如果兩個或多個進程在等待互斥訪問某一個要釋放的資源,僅喚醒等待隊列中一個才有意義。這個進程佔有資源,而其他進程繼續睡眠可以用DECLARE_WAIT_QUEUE_HEAD(name)宏定義一個新的等待隊列,該宏靜態地聲明和初始化名為name的等待隊列頭變數。 init_waitqueue_head()函數用於初始化已動態分配的wait queue head變數等待隊列可以通過DECLARE_WAITQUEUE()靜態創建,也可以用init_waitqueue_head()動態創建。進程放入等待隊列並設置成不可執行狀態。工作隊列,workqueue,它允許內核代碼來請求在將來某個時間調用一個函數。用來處理不是很緊急事件的回調方式處理方法.工作隊列的作用就是把工作推後,交由一個內核線程去執行,更直接的說就是寫了一個函數,而現在不想馬上執行它,需要在將來某個時刻去執行,那就得用工作隊列准沒錯。如果需要用一個可以重新調度的實體來執行下半部處理,也應該使用工作隊列。是唯一能在進程上下文運行的下半部實現的機制。這意味著在需要獲得大量的內存時、在需要獲取信號量時,在需要執行阻塞式的I/O操作時,都會非常有用。
Ⅸ linux內核工作隊列怎麼工作的
Linux 2.6內核使用了不少工作隊列來處理任務,他在使用上和 tasklet最大的不同是工作隊列的函數可以使用休眠,而tasklet的函數是不允許使用休眠的。
工作隊列的使用又分兩種情況,一種是利用系統共享的工作隊列來添加自己的工作,這種情況處理函數不能消耗太多時間,這樣會影響共享隊列中其他任務的處理;另外一種是創建自己的工作隊列並添加工作。
(一)利用系統共享的工作隊列添加工作:
第一步:聲明或編寫一個工作處理函數
void my_func();
第二步:創建一個工作結構體變數,並將處理函數和參數的入口地址賦給這個工作結構體變數
DECLARE_WORK(my_work,my_func,&data); //編譯時創建名為my_work的結構體變數並把函數入口地址和參數地址賦給它;
如果不想要在編譯時就用DECLARE_WORK()創建並初始化工作結構體變數,也可以在程序運行時再用INIT_WORK()創建
struct work_struct my_work; //創建一個名為my_work的結構體變數,創建後才能使用INIT_WORK()
INIT_WORK(&my_work,my_func,&data); //初始化已經創建的my_work,其實就是往這個結構體變數中添加處理函數的入口地址和data的地址,通常在驅動的open函數中完成
第三步:將工作結構體變數添加入系統的共享工作隊列
schele_work(&my_work); //添加入隊列的工作完成後會自動從隊列中刪除
或schele_delayed_work(&my_work,tick); //延時tick個滴答後再提交工作
(二)創建自己的工作隊列來添加工作
第一步:聲明工作處理函數和一個指向工作隊列的指針
void my_func();
struct workqueue_struct *p_queue;
第二步:創建自己的工作隊列和工作結構體變數(通常在open函數中完成)
p_queu=create_workqueue("my_queue"); //創建一個名為my_queue的工作隊列並把工作隊列的入口地址賦給聲明的指針
struct work_struct my_work;
INIT_WORK(&my_work, my_func, &data); //創建一個工作結構體變數並初始化,和第一種情況的方法一樣
第三步:將工作添加入自己創建的工作隊列等待執行
queue_work(p_queue, &my_work);
//作用與schele_work()類似,不同的是將工作添加入p_queue指針指向的工作隊列而不是系統共享的工作隊列
第四步:刪除自己的工作隊列
destroy_workqueue(p_queue); //一般是在close函數中刪除
Ⅹ linux內核的工作隊列任務沒處理完又來一個任務怎麼辦工作對列到底是個什麼玩意
來任務就加入到工作隊列里了.你說的這個工作隊列很模糊.........因為linux里有很多"工作隊列"..................叫法雖然相同.但是概念不一樣.....