我正在嘗試編寫shell,但我不明白爲什麼在createProcess
函數結束後,主進程不打印此"> "
。 也有更好的方法來打印來自主進程的東西嗎?我用這個if (mainPid == getpid()
。在函數中調用fork()後不會打印主進程
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
void createProcess(){
pid_t pid;
pid = fork();
if (pid == 0){
printf("Process created\n");
printf("Child pid is %d\n", getpid());
}
}
char *read_line(){
char *line = NULL;
size_t bufsize = 0;
getline(&line, &bufsize, stdin);
return line;
}
int main(){
pid_t mainPid = getpid();
char* line = NULL;
for (;;) {
if (mainPid == getpid()){
printf("> ");
line = read_line();
if (line[strlen(line) - 1] == '\n')
line[strlen(line) - 1] = '\0';
if (strcmp(line, "create") == 0)
createProcess();
else printf("Write \"Create\"\n");
}
}
free(line);
return 0;
}
期望輸出
> create
Process created
Child pid is 2417
>
我想我應該在'printf(「創建進程\ n」)之後添加一個'sleep(1)' ;' – Mattia
這不會工作,因爲它不是看看它的一個過程,看看我的答案,以解決問題。 – cheemcheem
謝謝我通過在main中的'createProcess()'之後添加'wait(0)'來解決問題。現在我試着瞭解你的解決方案。如果我想讓孩子進程處於活動狀態,那麼您建議使用哪種功能? – Mattia