一直以来, 感觉exec*族函数都是比较乱的。 查查手册就可以知道分来如下几类:
l: stands for list
v: stands for vector , 类似于main中的argv, 表示数组。
p: path
e: environment
本blog不是想写上面的内容的。
本人是对execl*都第二个参数, execv*第二个参数的第一个成员感兴趣。
很早之前就对这个参数不懂。 例如:
os.execlp("sleep", 'sleep', '10')
当同于:
os.execvp("sleep", ['sleep', '10])
看上去感觉不是很好, 第二个参数用来干嘛的? 为什么要重复写出来?
主要是在不知道那个参数是干什么的情况下, 写得和第一个参数相同, 所以就有这种重复的感觉.
起什么作用的呢? 看下面吧:
jessinio@jessinio-laptop:/proc/7345$ sleep 10 &
[1] 7594
jessinio@jessinio-laptop:/proc/7345$ ps x|grep sleep
7594 pts/10 S 0:00 sleep 10
jessinio@jessinio-laptop:/proc/7345$ /bin/sleep 10 &
[2] 7597
jessinio@jessinio-laptop:/proc/7345$ ps x|grep sleep
7597 pts/10 S 0:00 /bin/sleep 10
* 相同颜色部分的关系: 相同的
* 此字符串来自/proc/*/cmdline 文件内的信息
exec*族的第二个参数(对于v类是第二个参数的第一个成员)是起到显示的作用, 如:
import os
import sys
if __name__ == "__main__":
pid = os.fork()
if pid == 0:
child = ['i love linux', '10']
os.execv('/bin/sleep', child)
else:
print "%s" % pid
os._exit(0)
运行得到:
jessinio@jessinio-laptop:/tmp$ python exec_bin.py
7892
jessinio@jessinio-laptop:/tmp$ ps aux|grep 7892
jessinio 7892 0.0 0.0 2956 628 pts/9 S 21:55 0:00 i love linux 10
有点与众不同的玩法~~
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.