"。还有更好的方法来仅从主进程打印一些东西吗?我使用了这个 if (mainPid ==-6ren">
gpt4 book ai didi

c - 在函数中调用 fork() 后主进程不打印

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:26 32 4
gpt4 key购买 nike

我正在尝试编写一个 shell,但我不明白为什么 createProcess 函数结束后主进程没有打印此 "> "。还有更好的方法来仅从主进程打印一些东西吗?我使用了这个 if (mainPid == getpid()

#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
>

最佳答案

> create

> Process created

Child pid is 5655

所以我测试了它并得到了这个^(注意“进程创建”之前的“>”)。这意味着它不是按照您想要的顺序打印出来的。

编辑这是一个修复:

void createProcess(){
pid_t pid;
pid = fork();
if (pid == 0){
printf("Process created\n");
printf("Child pid is %d\n", getpid());
exit(0);
}
if (pid > 0) {
int stat_loc;
wait(&stat_loc);
}
}

得到这个输出:

> create
Process created
Child pid is 5700
>

关于c - 在函数中调用 fork() 后主进程不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43891745/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com