码迷,mamicode.com
首页 > 系统相关 > 详细

Linux上编辑然后执行一段脚本的机制

时间:2016-07-23 18:16:15      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

简要分析下刚开始提出的第二个问题, 因为没看代码,所以只是简单流程

 

1. 在bash里打开vim编辑文件并保存退出:

bash进程fork子进程, 然后调用exec装入vim程序,wait这个子进程
vim进程打开文件: fd = open系统调用
用户输入:- io中断 - 字符显示 - 存入缓冲区
保存: 缓冲区数据 write系统调用写入文件
退出: 关闭fd,退出vim进程
回到bash进程


2. bash中执行shell脚本, 如执行下面的脚本文件my.sh:

#!/bin/sh
cd .
ps -o pid,pgid,ppid,sid,tty,comm

 

 

流程:
bash进程fork子进程+调用exec执行脚本,并且wait这个子进程结束;
内核检查脚本第一行是否指定了解释器(如#!/bin/sh), 如果有,子进程会装入sh解释器程序,相当于运行/bin/sh my.sh
这个sh进程从内存中读取脚本命令:
    如果是内建命令(如cd),解释器会调用相关函数执行;
    如果是外部命令(如ps),sh进程fork子进程+调用exec装入ps程序执行,并且等待ps进程结束。
ps进程打印输出,进程结束,回到sh进程
sh执行完毕,进程结束,回到bash进程
bash进程继续执行,打印提示符等待输入

 

脚本执行结果:

$ ./my.sh
PID PGID PPID SID TT COMMAND
2162 2162 2161 2162 pts/11 bash
3030 3030 2162 2162 pts/11 my.sh
3031 3030 3030 2162 pts/11 ps

 

可以看出(PPID),ps parent进程是my.sh, my.sh parent是bash.  my.sh和ps进程属于一个进程组(PGID)

Linux上编辑然后执行一段脚本的机制

标签:

原文地址:http://www.cnblogs.com/hushpa/p/5699143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!