完全没看懂第一个例子,请问谁能帮忙解读一下?
Topic source使用fork创建子进程后,子进程会复制父进程的数据信息,而后程序就分两个进程继续运行后面的程序
pid = os.fork() 这一行开始执行了父子两个进程,自然也就打印了两次,
os.getpid() 获取当前进程的进程ID
os.getppid() 返回父进程的ID
普通的函数调用,调用一次,返回一次,但是fork()
调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。
理解一下这句话,我也是菜鸡
谢谢!我觉得我好像有点懂了,请问是这样理解吗?
fork()是一个很特殊的函数,调用一次,可以返回两次。先返回父进程,再返回子进程。所以先执行
print('I (%s) just created a child process (%s).' % (os.getpid(), pid))
再执行
print('I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid()))
其中呢,os.getpid()用于获得当前进程,在父进程里就是876,在子进程里是877。
我还有一个问题,pid = os.fork() 到底返回什么呢?廖大说子进程永远返回0,而父进程返回子进程的ID。但是print出来的时候,pid是子进程877,并不是0?
我还有一个问题,pid = os.fork() 到底返回什么呢?廖大说子进程永远返回0,而父进程返回子进程的ID。但是print出来的时候,pid是子进程877,并不是0?
-
os.fork(),对子进程返回的就是0,否则不可能进if分支。
-
os.getpid(),返回进程自身的进程id,父子进程都能用。
我还有一个问题,pid = os.fork() 到底返回什么呢?廖大说子进程永远返回0,而父进程返回子进程的ID。但是print出来的时候,pid是子进程877,并不是0?
实操os.fork()返回两个值,第一个值为父进程返回的子进程ID,第二个值为子进程返回的0。
if…else...的判断,第一个值判断if不成立,输出else的内容,其中os.getpid()为当前进程ID=父进程ID,pid为父进程返回的子进程ID。
第二个值判断if成立,输出if的内容,其中os.getpid()为当前进程ID=子进程ID,os.getppid()为当前进程父进程ID。
fork()是一个很特殊的函数,调用一次,可以返回两次。先返回父进程,再返回子进程。所以先执行
并不是先返回父进程在返回子进程,进程调度是操作系统决定的,千万不要在代码里假定哪个先执行(来自廖老师)
比如在父进程中加入休眠,子进程就会先执行
- 1
第二十二军规
这是廖大的例子
运行结果如下:
请问大家运行结果为什么是这样啊?我有两个疑问:
1. if else不是应该只返回一个结果吗?为什么这里两句话都被print出来了呢?
2. os.getpid()到底应该返回什么值?
里面的os.getpid()是父进程876
里面的os.getpid()是子进程877