[英]C programming child process is not executing
因此,這是創建兩個過程的簡單程序:父級和子級。 所以我要做的是在父進程內部有問候語,在子進程內部有名字。 由於某種原因,盡管我在父級內部調用了wait(),但子級進程仍無法打印。 我該怎么辦?
目標輸出:“ Hello Sam”,輸出I“ M GETTING:“ Hello”
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
char *greeting = "Hello";
char *name;
pid_t pid;
pid = fork();
if(pid == 0)
{
name = "Sam";
exit(0);
}
else if(pid == -1)
printf("Fail\n");
else{
wait(0);
printf("%s %s", greeting, name);
}
}
當您調用fork()時,子進程將收到父進程的地址空間(變量等)的副本 。 這意味着在子級中,從父級定義了“名稱”。 但是,子進程中的“名稱”只是一個副本。 因此,在子進程中對其進行修改不會影響父進程。
要獲得我感覺到的行為,請用vfork()替換fork()。 在此討論中,唯一的區別是:
編輯:我忘了補充,如果您走了vfork路線,則在子進程中將exit()更改為_exit()
一旦分叉的子進程將獨立於父進程運行。 因此,當您在子級中set name="Sam"
,它位於與printf不同的程序中。 因此您看不到該消息。
在子進程中,您分配了name
,然后退出。
if(pid == 0)
{
name = "Sam";
exit(0);
}
printf("%s %s", greeting, name);
行僅在else
分支(即父進程)中執行。 這實際上是未定義的行為,因為name
未初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.