常见坑

1 子父进程 管道

管道的最基本作用就是衔接输入输出;
bash是解释执行!他在命令中看到管道符的时候会将管道符前边的开启一个子进程,管道符之后的也开启一个子进程,然后利用pipe进行串联;

  1. [binc@localhost ~]$ a=1
  2. [binc@localhost ~]$ echo $a # 输出变量
  3. 1
  4. [binc@localhost ~]$ { a=2;echo "nihhao"; } | cat # | 管道符
  5. nihhao
  6. [binc@localhost ~]$ echo $a #进程隔离,父进程拿不到子进程的变量 想要用的话两个方法 1:export变成环境变量 2 写入文件然后父进程读文件
  7. 1
  8. [binc@localhost ~]$ { echo $a;a=2;echo $a; } | cat #子进程能够拿到父进程的变量
  9. 1
  10. 2
  11. [binc@localhost ~]$
  12. [binc@localhost ~]$ echo $$
  13. 3760
  14. [binc@localhost ~]$ echo $$ |cat # $$ $BASHPID都是当前进程pid,区别是$$的优先级高于管道符;$$被优先解释成3760之后才解释了管道符的含义
  15. 3760
  16. [binc@localhost ~]$ echo $BASHPID | cat #bash是解释执行!他在命令中看到管道符的时候会将管道符前边的开启一个子进程,管道符之后的也开启一个子进程,然后利用pipe进行串联两个子进程的标准输入和标准输出; 所以输出的当前进程号与命令窗口的不一样;
  17. 3849
  18. [binc@localhost ~]$