首先,需要说的是:
1、在shell中,运行的每一个命令至少启动一个新进程,且:
$$:获取当前shell的进程号(PID)
$! :执行上一个指令的PID
2、重定向
与管道有点类似,例子:cmd1 <(cmd2) >(cmd3), cmd1, cmd2, cmd3的执行是同步并行的。
<(command)形式可以用在任何命令行中需要填写输入文件名的地方,command的标准输出会被该命令当作一个输入文件读入。
>(command)形式可以用在任何命令行中需要填写输出文件的地方,该命令的输出会被command作为标准输入读入。
两种形式中的command都在子shell环境中执行,结果不会影响当前的shell环境。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
pid=$$ mkfifo /tmp/fifo.$pid echo "$pid /data/test.sh" >/tmp/fifo.serv cat < /tmp/fifo.$pid rm /tmp/fifo.$pid
这里将逐行解释代码:
1、获得当前进程的id
2、创建fifo(在这里是客户端fifo)
3、将字符串重定向到服务器端fifo
4、读出服务器端应答
5、删除fifo