2016-04-24 61 views
-1

我有以下一段包含if-else语句的代码。当我打印它时,即使执行了if部分,它看起来仍然执行了else部分。我与猫-A运行它,并缩进看起来很好即使在python中执行IF stmt,也执行ELSE stmt

print "PRINT os.fork" 
pid = os.fork() 
if pid: 
    print "PRINT IF %d" %pid 
    os.close(write_fd) 
    self.pid2file[pid] = read_fd 
else: 
    print "PRINT ELSE" 
    signal.signal(signal.SIGTERM, signal.SIG_DFL)$ 

这里是输出:

PRINT os.fork 
PRINT IF 63185 
PRINT ELSE 

顺便说一句,所有的代码都驻留在一个循环中。

我很欣赏这种行为的任何想法...

+0

你可以在那里使用fork()。所以会有两个过程:一个是pid = 0(孩子),另一个是pid =某事(父母)。父母将进入如果分支,孩子是其他人。 – syntonym

回答

3

这是因为与os.fork()要创建一个新的子进程。执行这两个过程,现有的父母和新的孩子从os.fork()之后的行继续。

孩子的PID在父亲中可用作为os.fork()的返回值,所以它执行if部分。

在儿童中,PID是0,这将导致部分else要执行,

两种方法中,父和子,产生在其上显示在终端的stdout输出。

所以不是这样的情况,ifelse语句在一个进程中执行;一个由父进程执行(当返回非零PID时),另一个由PID进程为零时的子进程执行。

0

您有两个进程:原始进程(父进程)和您使用fork创建的新进程,因为两个进程写入相同的输出,则会遇到输出的干扰:父PRINT IF进程和其他PRNT在子进程中。 你可以通过为每个进程分配不同的输出(例如2个不同的文本文件)来解决这个问题

+0

感谢您的快速回复! – revit