色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux如何以暫停狀態(tài)啟動新進程

xCb1_yikoulinux ? 來源:程序員寫個解 ? 作者:吳解君 ? 2022-04-15 12:25 ? 次閱讀

引言

上星期新加一好友,在好友的朋友圈動態(tài)里看到一張聊天截圖,是署名為“閱碼場”的Linux內(nèi)核技術(shù)交流群, 群友提問:

“請教一個Bash的問題:有沒有什么辦法讓一個新開的進程,一開始就處于暫停狀態(tài),直到我輸入fg?”

巧了,上星期我在嘗試使用ftrace根據(jù)進程號(PID)過濾、跟蹤內(nèi)核執(zhí)行過程時,迫切需要一個 進程啟動后處于暫停狀態(tài) ,與這位群友一樣,也是滿世界尋找Bash是否有內(nèi)置類似該功能,為什么我需要它呢?

倘若一個應(yīng)用程序是死循環(huán),或者執(zhí)行時間相對較舊,哪怕只執(zhí)行1秒,我Left Golden Finger完全可以輸入 “Ctrl+Z” 暫停它,借助pidof獲取進程的PID號,將其填入set_ftrace_pid僅過濾該進程信息,輸入 “fg” 恢復(fù)進程執(zhí)行。

再看另一個應(yīng)用場景,若某個進程執(zhí)行耗時很短呢?例如“echo”命令轉(zhuǎn)瞬即逝,完全沒有反應(yīng)的機會。

再舉例,倘若我就想抓取從應(yīng)用程序開始執(zhí)行到“Ctrl+Z”之間幾百毫秒的內(nèi)核執(zhí)行過程,我又該怎么?

“拿到源碼重新編譯,在main函數(shù)開始時添加足夠的延時。”頭上長尖角的小人說。

“耍流氓!無恥!偷換概念!”頭上另一個長翅膀小人指責。

好吧,別辯論了,回歸正題。

既然群友都和我一樣沒能找到Bash內(nèi)置實現(xiàn),再怎么說“閱碼場”聊天群也是人類高質(zhì)量碼農(nóng)的聚集地,我相信他也不是伸手黨。那么是時候造車子了,寫幾行代碼實現(xiàn)這個功能,沒騙你,真幾行,發(fā)個信號而已。

怎么做

先貼代碼再解釋。

67c86950-bbe9-11ec-aa7f-dac502259ad0.png

首先要了解系統(tǒng)快捷鍵Ctrl+Z以及命令fg本質(zhì)是做了什么,Ctrl+Z是向前端應(yīng)用發(fā)送 SIGSTOP信號 ,fg恢復(fù)最近一個被暫停的應(yīng)用發(fā)送 SIGCONT信號 ,并放到前臺來執(zhí)行。

SIGSTOP對應(yīng)信號19、SIGCONT對應(yīng)信號18,正如代碼23行和31行所做的那樣。你不相信,那就用API signal()去截獲這兩個信號的處理函數(shù)。

既然是信號觸發(fā),那就能用kill命令去替代Ctrl+Z和fg動作:

kill -19

kill -18

命令輸入 “kill -l” 可查閱到所有信號。

67d54724-bbe9-11ec-aa7f-dac502259ad0.png

寫個測試程序

寫另外一個測試程序child.c,僅打印進程的PID號,以及調(diào)試主進程是否能成功傳遞參數(shù)給子進程。

67ea1d70-bbe9-11ec-aa7f-dac502259ad0.png

文稿貼的兩張圖是測試的方法,主進程傳遞給子進程3個參數(shù)“aa bb cc”,剛啟動后子進程被信號暫停(T),左側(cè)輸入回車后子進程得以運行(S)。

67ffdc6e-bbe9-11ec-aa7f-dac502259ad0.png

6819b134-bbe9-11ec-aa7f-dac502259ad0.png

使用新輪子

恩,輪子造好了,看看它的效果怎么樣,用它協(xié)助ftrace抓取echo的執(zhí)行。

思考

現(xiàn)在左邊窗口輸入./master.elf echo abcdefg,切換到右側(cè)窗口輸入腳本ftrace-pid.sh,這個腳本將抓取1秒的數(shù)據(jù),再切換到左側(cè)窗口按Enter鍵。打開trace文件/tmp/a.txt,怎么樣了,echo命令的執(zhí)行信息被抓取下來了。

68398bb2-bbe9-11ec-aa7f-dac502259ad0.png

實驗里用到的ftrace-pid.sh腳本我把他的源碼貼在下面。

685cc276-bbe9-11ec-aa7f-dac502259ad0.png

思考

我在使用kill發(fā)送信號時有個疑問,既然應(yīng)用程序收到SIGSTOP信號后就處于停止狀態(tài),既然停止了,為什么還能處理之后的SIGCONT信號呢?之前是進程可運行,才能被調(diào)度、能處理信號,很好理解。之后進程都停止了,又怎么能處理SIGCONT信號恢復(fù)執(zhí)行呢?你能夠用鼠標點擊左下角“開始”菜單關(guān)閉計算機,卻無法繼續(xù)用鼠標使其開機。所以我猜測信號處理首先是由于調(diào)度器處理的。

第二個擴展問題,gdb調(diào)試應(yīng)用程序是可以暫停應(yīng)用程序執(zhí)行的,它使用的是ptrace。你能否寫一個應(yīng)用程序,它利用ptrace原理去暫停子進程執(zhí)行。我說的暫停位置可不是main,甚至在main之前。應(yīng)用程序啟動時 “第一個系統(tǒng)調(diào)用是什么?” 嘗試找到它,并截獲。

原文標題:僅40行代碼,Linux如何以暫停狀態(tài)啟動新進程,當然是發(fā)送信號呀

文章出處:【微信公眾號:一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11294

    瀏覽量

    209343
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4780

    瀏覽量

    68527
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3266

    瀏覽量

    57679

原文標題:僅40行代碼,Linux如何以暫停狀態(tài)啟動新進程,當然是發(fā)送信號呀

文章出處:【微信號:yikoulinux,微信公眾號:一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux系統(tǒng)下進程的幾種狀態(tài)介紹

    文章對 Linux 系統(tǒng)下進程的幾種狀態(tài)進行介紹,并對系統(tǒng)出現(xiàn)大量僵尸進程和不可中斷進程的場景進行分析,使用常用的幾種工具進行問題分析定位。
    發(fā)表于 11-24 16:15 ?1.3w次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)下<b class='flag-5'>進程</b>的幾種<b class='flag-5'>狀態(tài)</b>介紹

    一文搞懂Linux進程的睡眠和喚醒

    ): 進程在等待某個條件滿足(如I/O操作),可以被信號喚醒。 Linux通過內(nèi)核提供的系統(tǒng)調(diào)用來控制進程的睡眠。常用的系統(tǒng)調(diào)用有: sleep(): 使進程
    發(fā)表于 11-04 15:15

    Linux學(xué)習雜談】之進程狀態(tài)

    是否滿足,而深度睡眠是不能被喚醒的,只有等待到相應(yīng)的條件到達,才能夠結(jié)束睡眠狀態(tài)。5.停止態(tài) 停止態(tài)就是表明進程暫停了,這個是很好理解的,就跟我們播放電影一樣,可以先暫停,然后繼續(xù)播
    發(fā)表于 09-27 00:36

    Linux下的進程結(jié)構(gòu)

    、所接收的信號信息等。 下面詳細講解task_struct結(jié)構(gòu)中最為重要的兩個域:state(進程狀態(tài))和pid(進程標識符)。 1)進程狀態(tài)
    發(fā)表于 05-27 09:24

    Linux系統(tǒng)中PCB如何創(chuàng)建新進程

    PCB包含了一個進程的重要運行信息,所以我們將圍繞在創(chuàng)建一個新進程時,如何來建立一個新的PCB的這一個過程來進行分析,在Linux系統(tǒng)中,PCB主要是存儲在一個叫做task_struct這一個結(jié)構(gòu)體中,創(chuàng)建
    發(fā)表于 08-05 07:58

    Linux內(nèi)核創(chuàng)建新進程的過程分析

    PCB包含了一個進程的重要運行信息,所以我們將圍繞在創(chuàng)建一個新進程時,如何來建立一個新的PCB的這一個過程來進行分析,在Linux系統(tǒng)中,PCB主要是存儲在一個叫做task_struct這一個結(jié)構(gòu)體中,創(chuàng)建
    發(fā)表于 08-08 08:42

    linux系統(tǒng)進程存在狀態(tài)及管理

    linux系統(tǒng)進程存在狀態(tài)及管理詳解
    發(fā)表于 05-21 06:28

    Linux進程管理

    Linux進程管理 本章主要介紹進程的概念、狀態(tài)、構(gòu)成以及Linux進程的相關(guān)知識。 掌握
    發(fā)表于 04-28 14:57 ?0次下載

    Linux進程控制編程

    7.2 Linux進程控制編程 1.fork() 在Linux中創(chuàng)建一個新進程的惟一方法是使用fork()函數(shù)。fork()函數(shù)是Linux
    發(fā)表于 10-18 14:16 ?0次下載

    Linux守護進程詳解

    較長的進程,通常獨立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護進程常常在系統(tǒng)引導(dǎo)載入時啟動,在系統(tǒng)關(guān)閉時終止。Linux有很多系統(tǒng)服務(wù),大多數(shù)服務(wù)都是通過守護
    發(fā)表于 10-18 14:24 ?0次下載
    <b class='flag-5'>Linux</b>守護<b class='flag-5'>進程</b>詳解

    最新Linux進程凍結(jié)技術(shù)需要了解

    進程凍結(jié)技術(shù)(freezing of tasks)是指在系統(tǒng)hibernate或者suspend的時候,將用戶進程和部分內(nèi)核線程置于“可控”的暫停狀態(tài)。 2 為什么需要凍結(jié)技術(shù)
    發(fā)表于 05-06 16:00 ?774次閱讀

    Linux 進程狀態(tài)淺析

    多個進程linux內(nèi)核需要對這些進程進行管理,以使它們在系統(tǒng)中“同時”運行。linux內(nèi)核對進程的這種管理分兩個方面:
    發(fā)表于 04-02 14:40 ?293次閱讀

    深度剖析Linux進程控制(上)

    Linux中,fork函數(shù)是非常重要的函數(shù),它從已存在進程中創(chuàng)建一個新進程新進程為子進程,而原進程
    的頭像 發(fā)表于 05-12 10:49 ?543次閱讀
    深度剖析<b class='flag-5'>Linux</b>中<b class='flag-5'>進程</b>控制(上)

    深度剖析Linux進程控制(下)

    Linux中,fork函數(shù)是非常重要的函數(shù),它從已存在進程中創(chuàng)建一個新進程新進程為子進程,而原進程
    的頭像 發(fā)表于 05-12 10:49 ?497次閱讀
    深度剖析<b class='flag-5'>Linux</b>中<b class='flag-5'>進程</b>控制(下)

    linux查看weblogic進程

    Linux操作系統(tǒng)中,WebLogic是一種常用的Java應(yīng)用服務(wù)器,用于部署和管理企業(yè)級Java應(yīng)用程序。為了確保WebLogic服務(wù)器正常運行,有時我們需要查看WebLogic進程以了解其狀態(tài)
    的頭像 發(fā)表于 12-05 16:07 ?1892次閱讀
    主站蜘蛛池模板: 诱咪视频免费| 精品无码一区二区三区中文字幕| 欧美巨大巨粗黑人性AAAAAA| 一亲二脱三插| 国产又爽又黄又不遮挡视频| 入禽太深免费高清在线观看5| 24小时日本在线观看片免费| 久久草这里全是精品香蕉频线观| 無码一区中文字幕少妇熟女H| 菠萝菠萝蜜在线观看视频| 免费成人高清在线视频| 中文字幕1| 久 久 亚洲 少 妇 无 码| 亚洲 欧美 国产 综合五月天| 国产成人精品三级在线| 青青久久国产| a在线免费观看视频| 蜜柚在线观看免费高清官网视频 | 国产日韩欧美有码在线视频| 老师小扫货水能么多叫出来| 亚洲色图19p| 国产69精品久久久久APP下载| 好大好爽好深舒服死了| 午夜伦理网| 国产精品无码AV天天爽色欲| 色青青草原桃花久久综合| 成人五级毛片免费播放| 日韩欧无码一区二区三区免费不卡| 99精品免费观看| 欧美 亚洲 日韩 在线综合| 99精品国产AV一区二区麻豆| 免费亚洲视频| AV午夜午夜快憣免费观看| 女侠含泪巨臀迎合79| china中国gay偷拍| 强行撕开衣服捏胸黄文| 成人国产在线看不卡| 射漂亮黑b丝女| 国产人妻人伦精品59HHH| 亚洲精品久久7777777| 久久高清免费视频|