shell可以通过管道符将前一个进程的标准输出重定向到后一个进程的标准输入。用如下程序观察管道前后进程的父进程和进程组:
void func() {
printf("pid is %d\n", getpid());
printf("ppid is %d\n", getppid());
printf("group id is %d\n", getpgid(0));
}
编译得到可执行文件按照如下命令执行:
./a.out > tmp | ./a.out
终端显示标准输出:
pid is 17733
ppid is 32144
group id is 17732
tmp文件内容:
pid is 17732
ppid is 32144
group id is 17732
其中,32144是登录shell的进程号,可见,两个进程都是从登录shell中fork和exec出来的,第一个进程作为进程组的组长,这个很好理解,注意shell将第二个进程也放到第一个进程的进程组中
本文通过一个示例程序深入探讨了Shell管道的工作原理,展示了如何通过管道将一个进程的标准输出连接到另一个进程的标准输入。同时,分析了管道前后进程的父子关系及进程组归属,揭示了shell如何管理fork和exec的子进程。
1733

被折叠的 条评论
为什么被折叠?



