導航:首頁 > 操作系統 > linux獲取子進程

linux獲取子進程

發布時間:2022-09-06 04:33:10

『壹』 java獲取linux下正在運行的應用程序的數量

Java 可以通過 Runtime 調用Linux命令,形式如下:

Runtime.getRuntime().exec(command)
但是這樣執行時沒有任何輸出,因為調用 Runtime.exec
方法將產生一個本地的進程,並返回一個Process子類的實例(注意:Runtime.getRuntime().exec(command)返回的是
一個Process類的實例)該實例可用於控制進程或取得進程的相關信息。

由於調用 Runtime.exec
方法所創建的子進程沒有自己的終端或控制台,因此該子進程的標准IO(如stdin,stdou,stderr)都通過
Process.getOutputStream(),Process.getInputStream(),
Process.getErrorStream() 方法重定向給它的父進程了。

用戶需要用這些stream來向子進程輸入數據或獲取子進程的輸出,下面的代碼可以取到 linux 命令的執行結果:

try {
String[] cmd = new String[]{」/bin/sh」, 「-c」, 」 ls 「};
Process ps = Runtime.getRuntime().exec(cmd);

BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append(」\n」);
}
String result = sb.toString();

System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
借鑒於:http://www.linuxidc.com/Linux/2010-07/27376.htm

『貳』 linux 如何獲得正在運行程序的pid

你用了pthread庫,在鏈接的時候要加上
gcc
-lpthread
1.c
-o
1
即可
子進程(對應pid==0語句)調用pthread介面創建線程,在縣城內將value賦值5,然後列印
child:
value=%d\n
此時value
=
5
父進程
(對應
pid
>
0
語句),等待子進程執行完成後(wait語句),列印parent:
value=%d\n
,此時value
=
0
對於你補充問題的回答:
線程是在子進程里創建的,它只改變了子進程的value
(子進程和父進程的value處在不同的地址空間,互相沒有關系,而子進程和它所創建的線程是在同一地址空間,所以線程可以改變子進程的value),
父進程沒有創建線程,因此它的值不會被改變。

『叄』 linux 如何得到一個進程的子進程

調用 fork 函數。

『肆』 Linux中的進程問題,以及exit(0); 和sleep(5);

俺跟你解釋一下:

fork是一個跟當前進程一模一樣的進程,包括當前進程的所有狀態(有特殊設置就不會拷貝,如文件標識)。子進程如果不設置新的執行程序,會繼續執行fork之後的代碼,注意前面提過的跟父進程一模一樣的代碼。

pid==0代表是子進程,因此子進程會執行這段代碼:

if(pid==0)
{
printf("child!!! ");
//這里會造成子進程的主線程,main執行線程,阻塞5秒
sleep(5);
exit(0);
}

pid > 0 代表是父進程,因此父進程繼續執行的代碼為:

if(pid>0)
{
//此處必須等待子進程結束,子進程調用exit(0),時會通知父進程繼續執行
//屬於進程間通訊、同步的一個手段之一。那子進程等待5秒被喚醒,執行exit(0)
//父進程收到通知,獲取到子進程的退出狀態,繼續就會printf,基本也就是等待了5秒
//然後父進程return0等價於exit(0)正常結束
wait(NULL);//不這樣寫,父進程直接結束可能會產生僵屍進程,也可能變成孤兒進程由
//由init進程領養,並正確結束。通用的做法必須wait。根據操作系統以及版本不同處理
//方式可能不一樣,如aix可能就會有僵屍進程產生
printf("father!!! ");
}

『伍』 linux系統中創建子進程的程序,不知道該用getpid()還是getppid()

父進程返回的是是子進程號。他再getppid就成了他父親的了。他這里是要返回他兒子的進程號。他兒子返回的是0,getppid得到他父親的進程號。所以只有在父親這里才可以得到子進程號。

『陸』 Linux中子進程執行exec後,父進程還需要再wait這個子進程嗎

wait子進程是為了當子進程結束後,獲取子進程的相關運行信息和替子進程收屍(也就是清理子進程的PCB),不然子進程會變成僵屍進程,佔用系統空間。exec只是把子進程的代碼段替換掉,其他的段不變。如果父進程先於子進程結束,init進程會變成子進程的父進程,子進程結束後init會負責清理PCB,但是如果父進程晚於子進程結束,並且父進程也沒有wait子進程,那麼子進程結束後,它的PCB既不會被父進程清理也不會被init進程清理,浪費系統資源。

『柒』 Linux中如何在子進程獲取父進程的pid

getppid() 獲取父進程 id,
getpid() 獲取當前進程 id.

比如
int main()
{
int pid = fork();
if (pid == 0)
{
// child
printf ("ParentID is %d\n", getppid());
}
esle
{
printf("I'm parent, id %d\n", getpid());
wait(NULL);
}
return 0;
}

再就是程序編譯沒錯,但是運行時出現「實時信號 2」
沒有源碼,誰也幫不上你。 你可以用 gdb去調試。

『捌』 linux c語言調用shell 怎樣得到該子進程的pid(就是被調用的那個shell的pid)

第一種方法:執行完shell後用$!命令獲得pid
第二種方法:在shell中加入echo $$可以把它的pid輸出

『玖』 請教Linux下面 使用execl 調用一個進程如何獲得這個子進程得ID

execl的man手冊第一句話就說了:The exec() family of functions replaces the current process image with a new process image.你的整個進程空間都已經被替換成新的進程了,哪兒還有下面?下面已經太監了,不會再有了。所有execl之後的代碼都已經無法執行

『拾』 linux中,如何查看某個進程號下面有哪些子進程

ps -lax查看進程,以及父進程。找到自己需要查看的進程的pid,然後

ps --ppid ****

閱讀全文

與linux獲取子進程相關的資料

熱點內容
pdf數字不顯示 瀏覽:884
convertwordtopdf 瀏覽:251
程序編譯基本單位 瀏覽:21
python分析圖片角度 瀏覽:60
阿里雲伺服器能復制數據嗎 瀏覽:560
python拼音轉換文字 瀏覽:563
動畫遺傳演算法 瀏覽:63
php如何解析xml文件 瀏覽:702
如何改變appstore的語言 瀏覽:462
javahtmlxml 瀏覽:34
單片機啟動文件 瀏覽:811
橙app如何開啟聊天 瀏覽:899
訪問伺服器公網地址 瀏覽:666
pdf列印底色去掉 瀏覽:463
java快遞介面 瀏覽:397
哪個app可以教新爸爸 瀏覽:210
如何查看伺服器系統版本信息 瀏覽:524
成都市土地出讓金演算法 瀏覽:704
鋼筋加密標記 瀏覽:578
ps中擴展功能在文件夾的什麼位置 瀏覽:905