gpt4 book ai didi

c - 在Linux中的父子进程中使用Pipe

转载 作者:行者123 更新时间:2023-11-30 17:19:51 24 4
gpt4 key购买 nike

我为管道编写了一段代码,每次父进程首先死亡时,为什么会发生这种情况,没有规则哪个进程先执行,但这里父进程总是先死亡,为什么,任何人都可以解释这段代码。

主函数(){

int data_pass;
int file_pipes[2];
const char *some_data = "my name is khan";
char buffer[BUFSIZ + 1];
pid_t pid;
memset(buffer,'\0',BUFSIZ);
if(pipe(file_pipes) == 0)
{
pid = fork();
switch(pid)
{

case -1:
{
printf("cant create \n");
exit(0);
}
case 0:
{
data_pass = read(file_pipes[0],buffer,BUFSIZ);
printf("readed data is %s\n",buffer);
exit(0);
}
default:
{

sleep(5);
data_pass = write(file_pipes[1],some_data,strlen(some_data));
printf("wrote\n");
}
}
}
exit(0);

}

o/p-> 写

 readed data is my name is khan

最佳答案

这取决于调度程序。在某些系统上,子级是在可运行状态下创建的,但父级可以使用他的整个时间量。在某些其他系统上,实现可能有所不同,父级被停止,子级被选择立即运行。

总之,您不能依赖在没有同步的情况下并行运行的进程的执行顺序。

参见系统调用waitpidwait

此外,sleep(5) 并不意味着进程将休眠 5 秒。如果调度程序计划其他具有更高优先级的进程,则可能会更多。如果进程从操作系统获取信号,它也可以更少。

关于c - 在Linux中的父子进程中使用Pipe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764565/

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