如何将Unix管道重连到子进程,实现自动输入后移交用户控制?
问题:自动给程序a输入后让子进程b接管用户控制权
我运行一个需要固定输入的程序a,当所有输入提交完成后,它会通过execve启动新进程b;b同样可接收输入且会无限运行。我希望实现自动向a发送输入,待b启动后将控制权交还给用户。但尝试直接使用管道时,b会立即退出。
最小可复现C代码
#include <unistd.h> #include <stdio.h> int main(int argc, char*argv[ ]) { int myInt; printf("input integer: "); scanf("%d", &myInt); printf("int: %d \n", myInt); char *shell[2]; shell[0] = "/bin/sh"; // 以shell作为进程b的示例 shell[1] = NULL; execve(shell[0], shell, NULL); return 0; }
尝试的方案
echo "3" | ./a.out echo "3\nls" > ./a.out # 换行符也无法传递给子进程
编辑补充:解决方法
后来发现只需短暂等待即可解决问题:
(echo "42"; sleep 1; echo "ls") | ./a.out
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

