在线亚洲黄色-在线亚洲观看-在线亚洲电影-在线亚洲成人-岛国大片在线观看免费版-岛国大片在线播放高清

linux獲取daemon進程的控制臺數據

導讀linux提供了一個daemon函數,使得進程可以脫離控制臺運行,實現了后臺運行的效果。但是進程后臺運行后,原本在終端控制臺輸出的數據就看不到了。那么,怎樣才能找回這些數據。 。這里,文章主題就圍繞著如何獲得后臺進程的控制臺數據,其中的原理要從daemon說起。 。daemon主要做兩件事。1、創建子進程,退出當前進程,并且以子進程創建新會話。這樣,就算父進程退出,子進程也不會被關閉。2、將標準輸入,標準輸出,標準錯誤都重定向/dev/null。daemon實現大致如下:intdaemonize(intnochdir,intnoclose) 。{ 。intfd。 。switch(fork()){。case-1。return(-1)。case0。

系統大全為您提供linux提供了一個daemon函數,使得進程可以脫離控制臺運行,實現了后臺運行的效果。但是進程后臺運行后,原本在終端控制臺輸出的數據就看不到了。那么,怎樣才能找回這些數據??這里,文章主題就圍繞著如何獲得后臺進程的控制臺數據,其中的原理要從daemon說起。?daemon主要做兩件事:1、創建子進程,退出當前進程,并且以子進程創建新會話。這樣,就算父進程退出,子進程也不會被關閉2、將標準輸入,標準輸出,標準錯誤都重定向/dev/nulldaemon實現大致如下:intdaemonize(intnochdir,intnoclose)?{?intfd;?switch(fork()){case-1:return(-1);case0:break;default:_exit(EXIT_SUCCESS);}?if(setsid()==-1)return(-1);?if(nochdir==0){if(chdir("/")!=0){perror("chdir");return(-1);}}?if(noclose==0&&(fd=open("/dev/null",O_RDWR,0))!=-1){if(dup2(fd,STDIN_FILENO)<0){perror("dup2stdin");return(-1);}if(dup2(fd,STDOUT_FILENO)<0){perror("dup2stdout");return(-1);}if(dup2(fd,STDERR_FILENO)<0){perror("dup2stderr");return(-1);}?if(fd>STDERR_FILENO){if(close(fd)<0){perror("close");return(-1);}}}return(0);}所以,想取回進程的控制臺數據,只要將標準輸出,標準錯誤重定向到指定文件,然后讀取這個文件就好了。?文章這里寫了個例子,簡單演示下(這里通過kill信號完成進程通信,有點粗暴)代碼如下,保存為daemon_example.c#include?#include?#include?#include??staticintfd=-1;?voidsigroutine(intdunno){switch(dunno){caseSIGUSR1:fprintf(stderr,"Getasignal--SIGUSR1");if(fd!=-1)close(fd);fd=open("/tmp/console_temp.log",O_RDWR|O_APPEND|O_CREAT,0600);if(fd==-1)break;dup2(fd,STDIN_FILENO);dup2(fd,STDOUT_FILENO);dup2(fd,STDERR_FILENO);break;?caseSIGUSR2:fprintf(stderr,"Getasignal--SIGUSR2");if(fd!=-1)close(fd);fd=open("/dev/null",O_RDWR,0);if(fd==-1)break;dup2(fd,STDIN_FILENO);dup2(fd,STDOUT_FILENO);dup2(fd,STDERR_FILENO);break;}return;?}?intmain(){signal(SIGUSR1,sigroutine);signal(SIGUSR2,sigroutine);?daemon(1,0);for(;;){fprintf(stderr,"test");//不斷打印testsleep(1);}return0;}然后,編譯和執行這個程序:$gcc-odaemon_exampledaemon_example.c$chmod+xdaemon_example$./daemon_example$ps-ef|grepdaemon_exampleroot113281019:15?00:00:00./daemon_example如上,進程后臺運行了,拿到pid11328?接著,寫個腳本測試這個程序,保存為test.sh:#!/bin/bash?pid=$1ps-p$pid>/dev/nullif[!$?-eq0];thenechopiddoesnotexist!exit1fiechopid$pidtrap"kill-usr2$pid&&exit1"HUPINTQUITTERMkill-usr1$pidechoitworks,pleasewait..sleep1tail-f-n0/tmp/console_temp.logechodone!執行這個腳本,結果如下:$./test.sh11328pid11328itworks,pleasewait..testtest然后,按ctrl+c退出腳本,這時腳本會通知進程將標準輸出和標準錯誤重定向到/dev/null,繼續后臺運行。這樣,這個腳本就成了后臺進程的調試工具了,需要后臺數據的時候執行一下,不需要就關閉。當然,這只是一個示例,實際應用中要做改善,比如kill信號改成pipe或socket通訊,緩存文件要限制大小,或自動清除等。經驗總結:??以上就是系統大全給大家介紹的如何使的方法都有一定的了解了吧,好了,如果大家還想了解更多的資訊,那就趕緊點擊系統大全官網吧。??本文來自系統大全http:///如需轉載請注明!推薦:win7純凈版?

為你推薦
資訊專欄
熱門視頻
相關推薦
LinuxMalloc分析從用戶空間到內核空間 修復Win8電腦的7個問題辦法 nginx配置示例 Win81怎么設置默認瀏覽器Win81設置默認程序辦法 查看Linux下系統資源占用常用命令 linux中打包和壓縮的理解 linux命令之sort Linux下查找連接了mysql的進程 Linux下多線程排序的實現 linux下實現監控進程網絡帶寬 win8系統啟動時出現應用程序沖突怎么辦使用執 linuxtomcat一鍵維護腳本系 怎么樣查看Win81WinSxS文件夾實際大小 如何才能WPS快速輸入商標符號WPS快速輸入商標符 網易云音樂如何排序網易云音樂歌單排序的方 找回windows8命令提示符的辦法介紹 Win8遠程桌面登錄如何清除歷史痕跡 Linux011啟動流程分析 Win8系統怎么關閉smartscreen篩選器 win81自帶輸入法設置字體大小怎么樣改變方法 一個簡單的linux線程池 為什么win8設置了從不休眠還是休眠windows8取消休 Win8系統無法關閉后臺程序導致電腦卡的解決方法 有道云筆記如何找回被刪除的文件 win81系統怎樣設置滑動關機方法 Ubuntu時間管理 Linux文件lscpmvrm Windows81系統IE10瀏覽器如何去除超鏈接下劃線 Linux宕機后如何重啟最安全 linux下vi編輯器命令大全1 inux虛擬機網絡配制方法及遇到問題的解決方法 一樣的Windows8不一樣的概念圖 Win8系統中運行命令提示符的辦法 藍屏錯誤代碼是0x0000007F怎么辦 Win8創建圖片密碼與Pin碼 在GNULinux中查看端口占用情況的命令方法 怎么樣linux命令之halt命令 Ubuntu下的用戶和權限三 win8操作系統如何打開xv格式文件 Win81Update如何禁用OneDrive同步服務
Top 主站蜘蛛池模板: 亚洲国产成人久久综合一 | 亚洲国内精品 | 国产精品va在线观看无 | 欧美日韩国产亚洲人成 | 欧美午夜视频在线观看 | 日韩欧美一区二区三区不卡在线 | 精品欧美一区二区三区精品久久 | 久久天堂| 国产欧美精品一区二区三区四区 | 国产精品第 | 亚洲香蕉| 91精品国产91久久久久久 | 免费看真人a一级毛片 | 国产成人精品一区二区不卡 | 亚洲精彩视频在线观看 | 久久亚洲精选 | 欧美日韩国产专区 | 日韩区在线 | 亚洲欧美在线观看 | 亚洲欧洲久久 | 国内精品线在线观看 | 日韩欧美一区二区三区 | wwwxxx欧美| 小处雏高清一区二区三区 | 91精品国产综合久 | 亚洲国产日韩在线一区 | 欧美精品国产日韩综合在线 | 久久成人精品 | 国产精品美女久久久久 | 欧美日韩亚洲一区二区 | 国产日韩视频 | 亚洲自拍另类 | 欧美国产日韩一区二区三区 | 激情专区 | 91精品一区二区三区在线播放 | 在线亚洲欧国产精品专区 | 欧美精品在线免费观看 | 国产一区二区不卡 | 免费看欧美日韩一区二区三区 | 亚洲免费一区 | 一边摸一边爽一边叫床免费视频 |