我正在學習C並遇到一個小問題。閱讀關於維基百科和StackOverflow上的fork()
炸彈。我想實現相同的,但使用命令行參數。Fork-Exec沒有圈的炸彈
我想無休止地調用firefox/chrome,但無法在我的下面的程序中做同樣的事情。任何援助將不勝感激。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <errno.h>
int main(int argc, char **argv)
{
pid_t pid;
char *parmList[] = {"firefox", "index.html", NULL};
int a;
if ((pid = fork()) == -1)
{
perror("fork failed");
}
if (pid == 0)
{
a = execvp("/usr/bin/firefox", parmList);
fprintf(stdout, "execvp() returned %d\n", a);
fprintf(stdout, "errno: %s (%d).\n", strerror(errno), errno);
}
else
{
waitpid(pid, 0, 0);
}
return 0;
}
那麼,你分叉一次。也許嘗試做更多? – Ryan
它沒有執行,我嘗試使用while循環並給出參數,例如'myProgram firefox' – user3337714
'execvp()'如果成功則永不返回;而是用當前執行的二進制代替當前進程。因此,只有在執行Firefox **失敗的情況下才會執行'fprintf(stdout,...);'行。在正常成功的情況下,您看不到任何輸出。如果它啓動了Firefox的第一個副本,則父級只會「掛起」,直到最後一個Firefox窗口關閉;如果Firefox已經打開,程序會立即返回。只是因爲你沒有看到你的期望,並不意味着*「它沒有執行」*。 –