我用C有這種多進程程序:多處理程序沒有給予期望的輸出
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
pid_t i = fork();
if(i == 0)
{
execv("./prcs1", (char *[]){ "./prcs1", argv[1], NULL});
_exit(1);
}
else if (i > 0)
{
execv("./prcs2", (char *[]){ "./prcs2", argv[0], NULL});
_exit(2);
}
else
{
perror("Fork failed");
_exit(3);
}
}
在這個程序./prcs1
和./prcs2
是兩個不同的程序在兩個可執行文件。 ./prcs1
給出輸出爲Syscall finished
和./prcs2
給出輸出Stdlibrary finished
。而我得到以下輸出在每次運行:
Syscall finished
Stdlibrary finished
現在,我的問題是:
- 請問上面的程序運行兩個進程
prcs1
和並行prcs2
? - 如果它並行運行,那麼每次我都會得到相同的結果,還是我也可以得到一個輸出,其中
Stdlibrary finished
排在第一位,Syscall finished
排在第二位?如果這是可能的,那麼爲什麼我在每次運行中獲得相同的輸出?
這些需要執行多少時間?例如,如果「Syscall」比「Stdlibrary」快得多,那麼你總會得到相同的結果。 – VHarisop 2015-01-31 21:41:34
@VHarisop當我使用時間分別運行這兩個程序時,我得到:real \t 0m0.044s,用戶0m0.000s,syscall程序的sys 0m0.041s,以及真實的\t 0m0.028s,用戶0m0.019s,sys 0m0 Stdlibrary進程的.001s。那麼,看看這些時候,結果會一直如此嗎? – 2015-01-31 21:49:53
不,他們看起來很可比。你應該看看約阿希姆的答案。 – VHarisop 2015-01-31 21:53:56