我試圖並行運行三個execv(「./ test」,execv_str)。當每個execv()成功完成時,我需要打印出成功消息。fork()和exec()在C中並行運行
但現在我得到的結果如下:
[email protected]:~/Desktop/$./test -p
SUCCESS
SUCCESS
SUCCESS
[email protected]:~/Desktop/$ TESTING
TESTING
TESTING
預期的結果將是:
[email protected]:~/Desktop/$./test -p
TESTING
SUCCESS
TESTING
SUCCESS
TESTING
SUCCESS
[email protected]:~/Desktop/$
這裏是代碼。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int fork_execv()
{
int status;
pid_t pid;
pid = fork();
/* Handling Child Process */
if(pid == 0){
char* execv_str[] = {"./test", NULL};
if (execv("./test",execv_str) < 0){
status = -1;
perror("ERROR\n");
}
}
/* Handling Child Process Failure */
else if(pid < 0){
status = -1;
perror("ERROR\n");
}
return status;
}
int main(int argc, char *argv[]){
if (argc == 1){
sleep(5);
printf("TESTING\n");
}
else{
int i;
for(i = 0; i < 3; ++i){
if (fork_execv() != -1){
printf("SUCCESS\n");
}
}
}
}
如何修改我的代碼使其工作?
C不支持多線程 –
@DeepeshChoudhary - 這個問題不涉及線程。 (並且請注意C實際上支持線程。) –
@ Oliver Charlesworth真的嗎?請告訴我如何(或共享鏈接)。我很久以來就想在c中使用它。 –