【问题标题】:Using Pipe in parent and child process in linux在linux的父子进程中使用Pipe
【发布时间】:2015-02-27 11:55:40
【问题描述】:

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

主() {

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

【问题讨论】:

  • 可能是因为parent已经在运行了,但是child在parent发送数据后需要一点时间才能唤醒。
  • 抱歉,我想问为什么会这样。

标签: c linux process pipe fork


【解决方案1】:

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

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

查看系统调用 waitpidwait

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多