fork getpid 返回值

jz1043 2010-08-29 08:57:03

int main(void)
{
pid_t pid;
if ((pid = fork()) < 0)
err_sys("fork error");
else
if (pid == 0)
{
printf("pid : %d\n", pid);
printf("child process pid : %d\n", getpid());
}
else
{
printf("pid : %d\n", pid);
printf("parent process pid : %d\n", getpid());
}
exit(0);
}
pid : 11784
parent process pid : 11783

pid : 0
child process pid : 11784


子进程用fork和getpid得到为什么不一样?
...全文
375 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bailu3181201 2012-06-28
  • 打赏
  • 举报
回复
我也是这么想的 嘿嘿
justkk 2010-08-30
  • 打赏
  • 举报
回复
fork()函数比较特别,调用一次,两次返回(一次是在子进程中,一次是在父进程中)。
对于父进程,其返回值是新创建的子进程的进程ID;
对于子进程,其返回值是0;

getpid()返回调用进程自己的进程ID。
jz1043 2010-08-30
  • 打赏
  • 举报
回复
我的意思是为什么在子进程里面pid和getpid两个值不一样。
现在自己想明白了,在子进程里面返回0是fork函数的规定,这个0用来区别父进程,用getpid得到的是子进程真正的pid.
digu 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 digu 的回复:]
lz要man fork

子进程拷贝父进程的副本,但在子进程之中fork的返回值就是0,规定如此。
[/Quote]

不好意思,lz我理解错你的意思了。见谅。。
digu 2010-08-29
  • 打赏
  • 举报
回复
lz要man fork

子进程拷贝父进程的副本,但在子进程之中fork的返回值就是0,规定如此。
mymtom 2010-08-29
  • 打赏
  • 举报
回复
父进程用fork和getpid得到也不一样。
fork在父进程里返回新生成的子进程的pid
在子进程里返回0

getpid返回的是调用进程(或者说当前进程)的pid

[Quote=引用楼主 jz1043 的回复:]
子进程用fork和getpid得到为什么不一样?

C/C++ code

int main(void)
{
pid_t pid;
if ((pid = fork()) < 0)
err_sys("fork error");
else
if (pid == 0)
{
printf("pid : %d\n", pid);
……
[/Quote]

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧