zoukankan      html  css  js  c++  java
  • 子进程和父进程关系以及缓冲区应用

    int main()
    {
    printf("abc ");
    pid_t r = fork();//子进程从fork()的下条语句开始运行,标准答案是从fork的后半部分开始运行
    if(r==0)
    {
    printf("getpid = %d ",getpid());
    printf("getppid = %d ",getppid());

    }

    if(r>0)
    {
    printf("r = %d ",r);
    printf("getpid = %d ",getpid());
    printf("getppid = %d ",getppid());

    }
    if(r==-1)
    {
    printf("error! ");
    }
    printf("123 ");


    ./getpid > 1.txt
    1.txt:
    abc
    r = 2925
    getpid = 2924
    getppid = 2349
    123
    abc
    getpid = 2925
    getppid = 1
    123

    ./getpid
    abc
    r = 2922 创建的子进程的pid
    getpid = 2921 当前进程的pid
    getppid = 2349当前进程父进程的pid
    123

    gec@ubuntu:~/shared$ getpid = 2922当前进程的pid
    getppid = 1 //init进程号,父进程死了找了一个继父init,如果用else if else,结果会不一样。
    123

    为什么1.txt多个abc?
    因为文本为全缓冲,而屏幕为行缓冲,当将执行程序的结果直接输出到屏幕时,遇到‘ ’,将结果
    强制刷新,输出到屏幕,然后将内容清空,所以父进程拷贝到子进程的代码中不含有abc,
    但输出到文本不一样,文本为全缓冲,系统会将代码全缓冲到一个缓冲区中,父进程执行代码printf
    ("abc ")后,并不会将其清空,而是将其存放到缓冲区,并copy到子进程,然后子进程运行后就会再次输出
    abc。

  • 相关阅读:
    CentOs图形界面的开启与关闭
    在CentOS上安装ZooKeeper集群
    CentOs中mysql的安装与配置
    CentOS 6.5 下安装 Redis 2.8.7
    apt-get 与 yum的区别 (转)
    centos 命令大全
    ctrl+c,ctrl+d,ctrl+z在linux中意义
    Jedis 例子(demo)大全
    gradle init.gradle的文件配置 使用
    Java使用Jetty实现嵌入式Web服务器及Servlet容器
  • 原文地址:https://www.cnblogs.com/defen/p/5210877.html
Copyright © 2011-2022 走看看