shell 脚本也能启动他自已的子进程. 这些子 shell(即子进程)使脚本因为效率而同时进行多个
子任务执行时能做串行处理.
一般来说,脚本里的一个外部命令(external command)能生成(forks)出一个子进程,然而Bash内建(builtin)的命令却不这样做,因此,内建命令比起外部的等价命令执行起来更快.
圆括号里的命令列表
( 命令 1; 命令 2; 命令 3; ... )
嵌在圆括号里的一列命令在一个子 shell 里运行.
注意: 在子 shell 里的变量不能被这段子 shell 代码块之外外面的脚本访问.这些变量是不能被
产生这个子 shell 的父进程(parent process)存取的,实际上它们是局部变量
(local variables).
在子 shell 中的目录更改不会影响到父 shell.
子shell只能继承父shell的一些属性,而子shell不可能反过来改变父shell的属性。子shell能够从父shell继承得来的属性有:当前的工作目录、环境变量、标准输入输出和错误输出、所有已打开的文件描述符、忽略的信号。子shell不能从父shell继承得来的属性是:除了环境变量和.bashrc文件中定义变量之外的shell变量、未被忽略的信号处理。
注意: 在一个大括号内的代码块不会运行一个子 shell. 只表示一组命令,最后必须以分号;结尾
{ command1; command2; command3; ... }
=========获取子进程的执行返回状态
#!/bin/bash
#
(ping 10.0.1.1 -c 3) &
(ping 10.0.1.219 -c 3) &
echo "$$ pid is :$$" >ping.pid
jobs -p >>ping.pid
for pid in `jobs -p`;do
wait $pid
retval="$?"
echo "$pid response code is: $retval"
done
# 如果需要精确地知道哪个PID的返回状态,需要进行精确的进程匹配信息。
阅读(1174) | 评论(0) | 转发(0) |