我想知道fork
,wait
和exit
如何相互沟通。 &n
和exit(0)
中传递的内容会返回父进程的内容吗?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void){
int n=5;
fork();
wait(&n);
printf("%d\n", n);
exit(0);
}
我得到的输出是
sh-4.3$ main
5
0
sh-4.3$
答案 0 :(得分:1)
fork()
创建一个新进程,该进程几乎是进行调用的进程的完全副本。新创建的进程称为子进程。请注意精确复制是一个强有力的假设!这实际上意味着新创建的进程在其创建时处于其父级的确切状态(这是一个稍微粗略的假设,但为了简单起见,将其视为原样)。然后一个进程调用fork
,然后两个进程从调用返回! fork
是一种克隆计算机(一只羊进入,然后两只羊退出机器!)。通常你应该测试fork
的返回值(详见man)。
然后从现在起两个进程独立运行!
一个人打电话给wait
,而另一个打电话给wait
。 wait
的效果在两者上都不同。对于原始进程,wait
将等待子进程终止,然后捕获有关该事件的信息。孩子打电话给wait
,但由于没有孩子n
什么都不做,所以立即回来。然后打印其变量5
的值,该变量未被修改:exit
。然后它wait
的值为0.所以它终止。这将允许父进程从其0
调用中唤醒并捕获其子进程的退出值(0)。然后打印出exit
和$mail->SMTPDebug = 2;
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for GMail
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Username = "*******"; // SMTP username
$mail->Password = "********"; // SMTP password
$mail->From = "*******"; //do NOT fake header.
$mail->FromName = "test";
$mail->AddAddress($to_email,"test"); // Email on which you want to send mail
$mail->IsHTML(true);
$mail->Subject = $subject;
$mail->Body = $mail_body;
s。
请注意,这种情况的某些变体可能会发生,而这不会改变可观察行为,并发运行可能运行。
答案 1 :(得分:0)
您可以在手册页上找到这些功能,fork,wait,exit。
对于fork,我会查找usage examples但是,因为解释起来有点复杂。