[英]Execute parent process before child process or vice versa
編輯:我已經修改了問題,使其更清楚。
我想要:
要么
這是第一種情況的代碼。 子進程不顯示更新的數組,而是原始數組。
#include <stdio.h>
void main(){
int p;
int i;
int values[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
p = fork();
if (p != 0){
for (i = 0; i < 10; i++){
values[i] = values[i] * 100;
}
}else{
printf("Updated elements: ");
for (i = 0; i < 10; i++){
printf("%d ", values[i]);
}
}
}
不使用共享內存就無法實現您所要求的。 當您fork()
,子級將獲得父級內存(包括數組)的副本。 但是,現在有兩個不同的數組,兩個進程都看不到對方對其副本所做的更改。
在派生之后在父上下文中使用sched _yield()
syscall,它將在父進程之前先執行子進程
您可以在父級中使用它: waitpid(p, 0, 0);
如果檢查所有三個條件而不是使用(p!= 0),也會更好,因為fork()調用有三個可能的輸出:
if ( p == 0 )
// Child Code
else if ( p > 0 )
// Parent Code
else
printf("fork failed");
至於先執行父進程,通常不是一個好主意,因為它會創建一個孤立的進程。 孩子必須在父母之前終止。 您可以在fork()調用之前的子進程之前執行要執行的代碼。 如果由於某種原因仍要先執行父級,則可以在子級中使用它:
waitpid(getppid(), 0, 0);
庫:
#include <sys/types.h>
#include <unistd.h>
#include<sys/wait.h>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.