shell编程基础(第x篇:子进程知识点汇总)
前言
这篇涉及到进程,相对偏难理解,大家简单的把shell编程中的进程理解为一个独立执行流即可,这样写的程序就是多个执行流啦
各种各样的子进程情况
1、后台运行,退出终端,程序会结束,标准输出与当前bash父进程共用一个
python baby.py &
2、退出终端,程序不结束,标准输出到文件中
nohup python baby.py &
3、子进程中执行程序,标准输出共享父进程
{
echo baby
echo baby
echo love you
}&
4、获取最近的一个子进程的pid
{
echo test
}&
last_pid=$!
5、子进程中可以使用父进程中定义的变量嘛?答案是可以。。
tips=baby
{
echo child process
echo ${tips}
}&
echo over
6、子进程可以使用父进程中定义的环境变量嘛?答案是可以
export TIPS=baby
{
echo child process
echo ${TIPS}
}&
echo over
7、子进程中可以使用父进程中的定义的局部变量嘛?答案是可以
export TIPS=baby
function test(){
local l_heihei=haha
{
echo child process
echo ${l_heihei}
}&
echo $!
}
test
echo over
8、反过来,父进程可以读取到子进程中定义的全局变量嘛? 答案是不可以
export TIPS=baby
function test(){
{
echo child process
fk=love
}&
echo "haha"
echo ${fk}
}
test
echo over
9、父进程可以读取子进程中定义的环境变量嘛?答案是不可以
export TIPS=baby
function test(){
{
echo child process
export fk=love
}&
echo "haha"
echo ${fk}
}
test
echo over
10、有两个子进程,他们可以互相访问定义的变量嘛? 答案是不可以
export TIPS=baby
{
export fk=love
}&
{
echo ${fk}
}&
test
echo over
11、父进程利用命名管道读取子进程中的变量
# 父进程中创建一个命名管道
mkfifo mypipe
#子进程中写入数据到管道
{
fk=love
echo "${fk}" > mypipe
} &
read message < mypipe
echo "Received : $message"
# 父进程中删除管道文件
rm mypipe
12、两个子进程,利用命名管道通信
# 创建一个命名管道
mkfifo mypipe
#第一个子进程中写入数据到管道
{
fk=love
echo "${fk}" > mypipe
}&
#第二个子进程读取从管道中读取数据
{
read message < mypipe
echo "Received : $message"
}&
# 删除管道文件
rm mypipe
echo over
13、利用文件通信,子进程将值写入到同一个文件中,父进程source为环境变量后进行通信,可能存在时序问题
#第一个子进程写入数据到文件
{
fk=love
echo "WHAT=${fk}" > test.txt
}&
#第二个子进程将文件中的值source为环境变量,然后再读取
{
source test.txt
echo "Received : $WHAT"
}&
echo over