Redis_day_15

本文探讨了Linux中管道命令的使用,展示了如何通过管道传递进程ID并与子进程中变量隔离和共享。重点讲解了`$$`和`$BASHPID`的区别,以及如何利用`export`实现父子进程间的变量交互。实例深入剖析了`test.sh`脚本中变量的隔离与同步问题。
摘要由CSDN通过智能技术生成

管道

1.衔接两个命令,前一个的输出作为后一个的输入;
2.管道会触发创建子进程;

[root@iZuf6ir4og87e245nh5ltuZ ~]# echo $$  输出当前进程PID 
10335
[root@iZuf6ir4og87e245nh5ltuZ ~]# echo $BASHPID 输出当前进程PID
10335
//$$  $BASHPID  都输出当前进程PID
开辟子进程
[root@iZuf6ir4og87e245nh5ltuZ ~]# echo $$ | more
10335  //但是显示的还是当前进程PID,说明没有开启新的子进程,说明$$优先级高于|管道符,
先%%赋值为当前进程PID,在运算管道符
[root@iZuf6ir4og87e245nh5ltuZ ~]# echo $BASHPID | more
10357 //开启新的子进程PID, $BASHPID 优先级低于管道
[root@iZuf6ir4og87e245nh5ltuZ ~]# 

Linux有父子进程,常规下,父子进程数据隔离,export命令可以让变量从父进程导入到子进程,子进程可以看到父进程变量,子进程只可以看到,父子进程修改互不影响

# tail -f test.sh 
#!/bin/bash

echo $$
echo $num1
num1=999
echo num1:$num1

sleep 20

echo afterNUM1: $num1




[root@iZuf6ir4og87e245nh5ltuZ redis_test]# echo $num1
1
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ((num1++))
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# echo $num1
2 //父进程为2
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ./test.sh &
[1] 10449
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# 10449

num1:999
afterNUM1: 999
^C
[1]+  Done                    ./test.sh
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# export num1  //子进程也可看到
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ./test.sh &
[1] 10451
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# 10451
2 //子进程读到2
num1:999  子进程修改成999 
^C
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# echo $num1
2  父进程还是2 说明子进程修改不影响父进程
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# afterNUM1: 999
export $num1^C
[1]+  Done                    ./test.sh
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ./test.sh &
[1] 10459
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# 10459
2
num1:999
^C
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ((num1++))
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ((num1++))  父进程修改
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# echo $num1
4
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# afterNUM1: 999  //父进程修改不影响子进程
^C
[1]+  Done                    ./test.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值