由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Linux shell编程的问题
相关主题
问一个关于ANSI C中system命令的问题A question related to pipe
printf("%s\n", NULL)的结果请问如何恢复正常的IO?
问一个进程调度的问题。 (转载)python soap库问题
在线问一个qsub的问题。想实现一个简单的script language,用perl好做么?
请教一道练习题(C,OS)问一个vc++ 2008的问题
问个c++ 编译的问题how can I get external program's result in C
Help -- How to output error messages to a file for scripts called by system calls???大家帮我看看C文件输入函数fprintf的问题
简单的perl问题菜鸟请教个hadoop streaming job 的问题 (转载)
相关话题的讨论汇总
话题: pid话题: fork话题: command1话题: fds话题: parent
进入Programming版参与讨论
1 (共1页)
B********s
发帖数: 3610
1
正在试着实现一般简单的linux shell,目前正在处理I/O redirection和pipeline,基本
的想法是,比如这样一个命令行: command1|command2|command3, 由shell fork一个子
进程,使用exec函数调用'command1'命令,然后command1进程再fork一个子进程来调用
command2,同时建立一个pipe用于command1和command2的通信, ...... 这样就形成了
一个链状的进程体系,主进程(shell)是祖先,并且通过 waitpid(pid, NULL, 0)函数
等待其他进程结束然后继续(pid是第一次fork的返回值)。现在的问题是,各个
command的执行顺序比较混乱,比如执行 ls|sort,输出的结果是正确的,但是主进程在
结果显示之前就已经继续运行把命令行提示符显示出来了。还有,如果执行ls|sort;
who ,则who的结果会先显示出来,和执行who;ls|sort的结果一样。
请大牛帮我找找原因吧,说得比较乱,还请见谅。
m***t
发帖数: 254
2
post source code bah.

【在 B********s 的大作中提到】
: 正在试着实现一般简单的linux shell,目前正在处理I/O redirection和pipeline,基本
: 的想法是,比如这样一个命令行: command1|command2|command3, 由shell fork一个子
: 进程,使用exec函数调用'command1'命令,然后command1进程再fork一个子进程来调用
: command2,同时建立一个pipe用于command1和command2的通信, ...... 这样就形成了
: 一个链状的进程体系,主进程(shell)是祖先,并且通过 waitpid(pid, NULL, 0)函数
: 等待其他进程结束然后继续(pid是第一次fork的返回值)。现在的问题是,各个
: command的执行顺序比较混乱,比如执行 ls|sort,输出的结果是正确的,但是主进程在
: 结果显示之前就已经继续运行把命令行提示符显示出来了。还有,如果执行ls|sort;
: who ,则who的结果会先显示出来,和执行who;ls|sort的结果一样。
: 请大牛帮我找找原因吧,说得比较乱,还请见谅。

B********s
发帖数: 3610
3
示意性代码如下:
parse() 函数返回一个pipeline p,包括多个command. execPipe()执行pipeline中的命
令。
static void execPipe(Pipe p)
{
int fds[2];
pid_t pid,parent;

if ((pid = fork()) <0)
exit(-1);
else if (pid == 0) { //child
for (all but the last command in this pipe) {

else if ((parent = fork()) == -1)
exit(-1);
else if (parent) { //parent process
dup2(fds[1],STDOUT_FILENO);
close(fds[0]);


【在 m***t 的大作中提到】
: post source code bah.
1 (共1页)
进入Programming版参与讨论
相关主题
菜鸟请教个hadoop streaming job 的问题 (转载)请教一道练习题(C,OS)
搜狐一题,寻解法问个c++ 编译的问题
弱问perl写网页buffer问题Help -- How to output error messages to a file for scripts called by system calls???
编写支持CGI的web服务器大致原理 (转载)简单的perl问题
问一个关于ANSI C中system命令的问题A question related to pipe
printf("%s\n", NULL)的结果请问如何恢复正常的IO?
问一个进程调度的问题。 (转载)python soap库问题
在线问一个qsub的问题。想实现一个简单的script language,用perl好做么?
相关话题的讨论汇总
话题: pid话题: fork话题: command1话题: fds话题: parent