ls -la | sort | less
在上面的命令中,有多少个Linux进程运行?
是3个(一个ls -la
,一个sort
,一个less
)吗?
还是5(一个用于ls -la
,一个用于sort
,一个用于less
,每个管道一个)?
|
命令是否需要单独的进程才能运行?
答案 0 :(得分:0)
答案 1 :(得分:0)
3个进程。父进程或您从(您的命令行)调用此命令的进程,对通过管道传输的两个进程分别调用pipe(2)
,因此ls -la | sort | less
需要调用pipe(2)
两次以创建两个管道:一个用于将ls
管道输送到sort
,另一个用于将sort
管道输送到less
。然后Bash为每个进程分叉一次(在这种情况下为3次)。在子代运行命令之前,他们会覆盖stdin和/或stdout。该命令的示例流程为:
ls
到sort
,另一个从sort
到less
ls
)将其stdout fd设置为写入管道A sort
)将其stdin fd设置为从管道A读取sort
)将其stdout fd设置为写入管道B less
)将其stdin fd设置为从管道B读取管道用于引导子进程的stdin和/或stdout,但管道本身不是进程。