Thursday, May 20, 2010

exec*族函数的好玩参数

一直以来, 感觉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.