linux虚拟机1、主进程创建匿名管道,然后创建子进程;子进程将任意一段字符串通过匿名管道发送给父进程,睡眠10秒后结束;父进程收到后将其显示出来,然后等待子进程结束的完整代码
时间: 2024-12-24 22:23:19 浏览: 13
在Linux环境下,你可以使用`pipe()`系统调用来创建匿名管道,结合fork()函数来实现父子进程间的通信。下面是一个简单的bash脚本示例,展示了如何创建子进程并通过管道通信:
```bash
#!/bin/bash
# 创建匿名管道
pipefd=$(mktemp -td pipe.XXXXXX)
trap "rm -rf $pipefd" EXIT
# 父进程部分
parent_pid=$(pidof "$0") # 获取当前进程ID
echo "Parent starting, pid: $parent_pid"
# 创建管道读端和写端文件描述符
read_end=$(fcntl $pipefd[0] FD_CLOEXEC)
write_end=$(fcntl $pipefd[1] FD_CLOEXEC)
# 主进程启动子进程
(
# 子进程部分
echo "Child process started, parent pid: $parent_pid"
cat >$pipefd[1] << EOF
Your string goes here (any text you want to send)
EOF
sleep 10
echo "Child process exiting..."
) <&$write_end &
# 等待子进程完成,并从管道接收数据
child_pid=$!
wait $child_pid
# 父进程读取并显示接收到的数据
data=$(cat $pipefd[0])
echo "Received from child: $data"
# 清理管道
close $read_end
close $write_end
```
在这个例子中,子进程向管道写入字符串,然后睡眠10秒。父进程则等待子进程结束后从管道读取数据并打印。
请注意,这个脚本需要直接运行,因为它是交互式的,如果在shell脚本环境中执行,可能无法按预期工作。
阅读全文