gpt4 book ai didi

linux - 为什么 fork() 不立即给出正确的 pid?

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:02 25 4
gpt4 key购买 nike

当我运行时

#!/usr/bin/perl
my $pid;
if ($pid = fork) {
system("sleep 100");
}
print "pid $pid\n";

然后我明白了

pid 0

当它退出时

pid 17613

当它运行时,我可以看到子进程 ID

jasl     17612 17036  0 14:05 pts/2    00:00:00 /usr/bin/perl ./fork.pl
jasl 17613 17612 0 14:05 pts/2 00:00:00 [fork.pl] <defunct>
jasl 17614 17612 0 14:05 pts/2 00:00:00 sleep 100

问题

为什么我首先得到pid 0( fork 成功),然后当它退出时得到正确的pid 17613?就好像 print 行被执行了两次?

有没有办法从 perl 脚本中获取 sleep 命令的 PID?

最佳答案

as as if the print line is executed twice?

我建议您在使用 fork() 之前首先了解它的作用。然后你就会明白为什么该行被执行了两次。

简而言之:fork 创建当前进程的副本,从那时起两个进程都运行其余的代码。一个主要区别是子进程的返回码是 0,而父进程的返回码是子进程的 pid。

关于linux - 为什么 fork() 不立即给出正确的 pid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com