Chinaunix首页 | 论坛 | 博客
  • 博客访问: 712736
  • 博文数量: 79
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1338
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-12 08:51
个人简介

XMU->九天揽月->五湖抓鳖->DSP->driver->kernel/OpenWRT->ISP/RTOS

文章分类

全部博文(79)

文章存档

2020年(2)

2018年(3)

2016年(7)

2015年(42)

2014年(25)

分类: LINUX

2015-06-26 10:35:53

以两个脚本为例,father.sh调用son.sh
son.sh
    #!/bin/sh
    pid=$$
    name=`ps aux |grep -w $pid | grep -v grep | awk '{for(i=11;i<=NF;i++) printf("%s ", $i)}'`
    echo -e "    son process, pid=$pid, cmd=$name\n"
    sleep 100000
    exit

father.sh
    #!/bin/sh 
    pid=$$
    name=`ps aux |grep -w $pid | grep -v grep | awk '{for(i=11;i<=NF;i++) printf("%s ", $i)}'`
    echo -e "\n father process, pid=$pid, cmd=$name"
    sh son.sh #### 调用方法
    exit

调用son.sh方法有多种,对比它们的执行结果
1. sh son.sh
 father process, pid=3129, cmd=sh father.sh
    son process, pid=3135, cmd=sh son.sh
这种调用方式与 ./son.sh   /bin/son.sh是完全相同的。可见这种调用方法是fork出了一个完全的子进程来运行son.sh。

2. exec son.sh
 father process, pid=3153, cmd=sh father.sh
    son process, pid=3153, cmd=/bin/sh /bin/son.sh
这种方法并没有子进程,PID没有变化,而在当前进程中用son.sh代替了father.sh的进程cmd。


3. source son.sh
 father process, pid=3176, cmd=sh father.sh
    son process, pid=3176, cmd=sh father.sh
. son.sh,这种办法自始至终只有一个进程存在,包括PID和cmd都没有变化,只是把son.sh的脚本读取到当前进程环境下执行。所以要跟踪son.sh的调用关系可以用这种调用方法做到。
但要注意,脚本复杂起来后,各自脚本中的变量重名带来的污染。
阅读(2538) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~