参见示例 1,首先调用父进程,而示例 2 中首先调用子进程。我无法理解 fork() 的这种行为。请澄清。
例1:
main()
{
int pid;
if((pid=fork())>=0)
{
if(pid)
{
printf("parent\n");
}
else
{
printf("Child\n");
}
}
else
printf("Failed \n");
if(pid)
printf("Parent:After fork call\n");
else
printf("Child:After fork call\n");
}
O/p:-
[home]$ ./a.out
parent
Parent:After fork call
[home]$ Child
Child:After fork call
示例 2
main()
{
int pid;
if((pid=fork())>=0)
{
if(pid)
{
printf("Parent\n");
system("ls");
}
else
{
system("pwd");
}
}
else
printf("Failed \n");
if(pid)
system("ps");
else
printf("Child:After fork call\n");
}
O/p:-
Parent
/home/neeraj/Vector/OS
Child:After fork call
a.out sendsig sendsig.c test2.c test3.c test.c
PID TTY TIME CMD
1943 pts/0 00:00:00 bash
31719 pts/0 00:00:00 a.out
31720 pts/0 00:00:00 a.out <defunct>
31723 pts/0 00:00:00 ps
答案1
基本上花费的时间比返回ls
要长得多(仅列出内存中必须与文件系统对话的变量),这就是区别所在。pwd
pwd
ls
这是因为您正在创建新线程并且两个操作同时发生,某些操作比其他操作花费的时间更长。当您只是写出文本时,您可能已经让父线程始终可靠地先完成,但现在您正在执行实际工作,无论哪个线程先完成其工作,都将先完成。