新聞中心
在Linux下,子進程的創(chuàng)建和運行是非常方便和靈活的,但是在子進程中使用標準輸出流cout輸出信息相對來說有些麻煩。因為cout是一個C++的流對象,它是在C++標準庫中定義的。而在Linux下很多場景中,我們都需要使用C語言進行開發(fā),這就需要我們考慮如何在子進程中使用cout輸出信息。

公司主營業(yè)務:網(wǎng)站建設、成都網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出湞江免費做網(wǎng)站回饋大家。
本文將介紹三種在Linux下在子進程中使用cout輸出信息的方法。
之一種方法:使用dup2函數(shù)將cout輸出流重定向到標準輸出
dup2函數(shù)是一個很常用的函數(shù),它可以把指定的文件描述符拷貝到另一個文件描述符上。在這里,我們可以使用dup2函數(shù)將子進程的標準輸出流重定向到標準輸出上,這樣就可以在子進程中使用cout輸出信息了。
下面是代碼示例:
“`cpp
#include
#include
using namespace std;
int mn()
{
pid_t pid;
pid = fork();
if(pid
{
cout
}
else if(pid == 0) //子進程
{
dup2(fileno(stdout), fileno(stderr)); //將標準輸出流重定向到stderr上
cout
exit(0);
}
else //父進程
{
wt(NULL);
cout
exit(0);
}
return 0;
}
“`
在上面的代碼中,我們調用了dup2函數(shù)將標準輸出流重定向到標準錯誤上,這樣就可以在子進程中使用cout輸出信息了,并且在父進程中輸出了一條信息。
第二種方法:使用可執(zhí)行文件傳遞數(shù)據(jù)
在Linux下,使用可執(zhí)行文件執(zhí)行一個指令可以通過調用系統(tǒng)函數(shù)system()實現(xiàn)。這個函數(shù)的調用格式如下:
“`cpp
int system(const char *command);
“`
其中,parameter是需要執(zhí)行的可執(zhí)行文件的路徑及其參數(shù),例如:
“`cpp
system(“./test abc”);
“`
這里的test是一個可執(zhí)行文件的名稱,abc是要傳遞給它的參數(shù)。
下面是代碼示例:
“`cpp
#include
#include
#include
#include
using namespace std;
int mn(int argc, char *argv[])
{
pid_t pid;
pid = fork();
if(pid
{
cout
}
else if(pid == 0) //子進程
{
char* str = const_cast(“Hello World!”);
execlp(“./test”, “./test”, str, NULL);
}
else //父進程
{
wt(NULL);
cout
exit(0);
}
return 0;
}
“`
在上面的代碼中,我們使用execlp函數(shù)執(zhí)行了一個名為test的可執(zhí)行文件,并傳遞了一個字符串參數(shù)”Hello World!”。在test這個可執(zhí)行文件中,我們可以使用cout輸出這個字符串信息。
第三種方法:使用fprintf將cout信息輸出到標準錯誤流中
在Linux下,標準輸出流和標準錯誤流都是向終端輸出的流。在子進程中使用cout輸出信息也可以重定向到標準錯誤流上,這樣就可以避免了前面介紹的dup2函數(shù)的調用。
下面是代碼示例:
“`cpp
#include
#include
#include
#include
using namespace std;
int mn()
{
pid_t pid;
pid = fork();
if(pid
{
cout
}
else if(pid == 0) //子進程
{
fprintf(stderr, “I am child process!\n”);
exit(0);
}
else //父進程
{
wt(NULL);
cout
exit(0);
}
return 0;
}
“`
在上面的代碼中,我們使用fprintf函數(shù)將cout信息輸出到標準錯誤流中,同時也在test這個可執(zhí)行文件中,我們可以通過重定向標準錯誤流來獲取這個信息。
相關問題拓展閱讀:
- 創(chuàng)建一個子進程打開你的linux系統(tǒng)中的瀏覽器,子進程結束后輸出子進程
- 在 linux中如何結束由一個父進程產(chǎn)生的所有子進程
- linux中,如何查看某個進程號下面有哪些子進程?
創(chuàng)建一個子進程打開你的linux系統(tǒng)中的瀏覽器,子進程結束后輸出子進程
#include
#include
#include
#define
bufsize
int
main(void)
{
char
ch,dh,eh;
int
p;//文件描述符
pid_t
childpid;
if(pipe(p)
==
-1)/中行/創(chuàng)建管道戚稿
{
perror(“pipe
call”);
return
-1;
}
if((childpid
=
fork())
==
-1)//創(chuàng)建子進程
{
perror(“fork
call”);
return
-1;
}
if(childpid!=0)//父進程
{
close(p);//關閉讀文件
do
{
ch
=
getchar();
write(p,&ch,1);//向管道寫
}while(ch!=’x’);//遇到’x’則結束
}
else
if(childpid==0)//子進程
{
close(p);//關閉寫文件
while(1)
{
read(p,&dh,1);//高培孝從管道讀
if(dh
==
‘x’)
{
printf(“\n”);
return
0;
}
else
if(dh>=’a’&&dh=’a’&&dh
{
eh
=
(char)((int)dh
–
32);//轉化改喊成大寫輸出
printf(“%c”,eh);
}
else
{
printf(“%c”,dh);
}
}
}
在 linux中如何結束由一個父進程產(chǎn)生的所有子進程
killall命令殺死同一進程組內(nèi)的所有進程。它要指定要終止的進程的名稱,而非PID。
父進程未結束,子進程先結束,會產(chǎn)生僵尸進程。
子進程在調用exit命令結束自己的生命的時候,其實它并沒有真正的被銷毀,而是留下一個稱為僵尸進程(Zombie)的數(shù)據(jù)結構(系統(tǒng)調用 exit,它的作用是使進程退出,但也僅僅限于將一個正常的進程變成一個僵尸進程,并不能將其完全銷毀)。
即使是root身份kill -9也不能返畝銷殺死僵尸進程。補救辦法是殺死僵尸進程的父進程(僵尸進程的父進程必然存在),僵尸進程成為”孤兒進程”,過繼給1號進程init,init始終會負責清理僵尸進程。
僵尸進程的避免:
(1) 父進程通過wait和waitpid等函數(shù)等待子進程結束,這會導致父進程掛起。
(2) 如果父進程很忙,那么可以用signal函數(shù)為SIGCHLD安裝handler,因為子進程結束后, 父
進程會收到該信號,可以在handler中調用wait回收。
(3) 如果父進耐畢程不關心子進程什么時候結束,那么可以用signal(SIGCHLD, SIG_IGN) 通知內(nèi)
核,自己對子進程的結束不感興趣,那么子進程結束后,內(nèi)核會回收, 并不再給父進程發(fā)送
信號。
(4) 還有一些技巧,就是fork兩次,父進程fork一個子進程,然后繼續(xù)工作,子進程fork一 個孫進
程后退出,那么孫進程被init接管漏游,孫進程結束后, init會回收。不過子進程的回收 還要自己
做。
建議你使用第三種方法,父進程直接忽略子進程的結束,留給內(nèi)核作回收處理。這樣就不
會產(chǎn)生僵尸進程。
LInux 父進程液州關閉宏辯子進程蔽埋缺
采瞎辯用ps + grep + awk + pkill命令組合,可實現(xiàn)“結束由一個父進程產(chǎn)生的所有子進程”,如:
父進程名為 parent_proc,可先根據(jù)進程名稱,得到進程PID
ps -ef |grep parent_proc|egrep -v grep | awk ‘{print $2}’
根據(jù)父進程PID終止所有子進程PID,保留父進程
pkill -9 -P $p_pid
完整腳本:
for p_pid in `ps -ef |grep 磨寬缺parent_proc|egrep -v grep | awk ‘{print $2}’`
do
pkill -9 -P 巧歷$p_pid
done
有關各命令的詳情介紹請查閱相關參考資料。
pkill -a
linux中,如何查看某個進程號下面有哪些子進程?
ps -ef |grep進程首戚名者納陵茄答
ps -aux |grep 進程名
ps –ppid xxxx
ps -lax
top
ps -lax查看旅棗純巖悄進程拆咐,以及父進程。找到自己需要查看的進程的pid,然后
ps –ppid ****
ps aux |grep yourjinch或者top命令
編程方面的就不懂了 不好意思
ps –ppid xxxx
linux 子進程cout的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關于linux 子進程cout,Linux下如何在子進程中使用cout輸出信息?,創(chuàng)建一個子進程打開你的linux系統(tǒng)中的瀏覽器,子進程結束后輸出子進程,在 linux中如何結束由一個父進程產(chǎn)生的所有子進程,linux中,如何查看某個進程號下面有哪些子進程?的信息別忘了在本站進行查找喔。
成都網(wǎng)站設計制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設定制開發(fā)服務,為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設計,成都網(wǎng)站設計服務;成都創(chuàng)新互聯(lián)服務內(nèi)容包含成都網(wǎng)站建設,小程序開發(fā),營銷網(wǎng)站建設,網(wǎng)站改版,服務器托管租用等互聯(lián)網(wǎng)服務。
網(wǎng)站標題:Linux下如何在子進程中使用cout輸出信息? (linux 子進程cout)
URL鏈接:http://fisionsoft.com.cn/article/dpsiccc.html


咨詢
建站咨詢
