fork() 함수 실행 시 함수가 두번 실행되는 문제..

jjim1014의 이미지

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<dirent.h>
#include<fcntl.h>
#include<string.h>
#include<openssl/sha.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/wait.h>
#include<pwd.h>
#include<time.h>
 
void test();
 
void main(int argc, char *argv[])
{
 pid_t pid;
 int status;
 
  if(pid = fork() <0)
     printf("fork error.\n");
 
     else if(pid == 0) //child process.
        test();    
else 
waitpid(pid, &status, 0);
 
 
}
 
void test()
{
 
 printf("{%d}child process.\n",getpid());
 
 
}

이렇게 코드를 짜면 test() 가 두번 수행이 되는데, 그 이유는 fork() 이하로 부모와 자식 프로세스가 각각 한번씩 수행하기 때문에 그런걸로 알고있습니다. 그런데 부모는 실행을 안하도록 하고 자식만 실행하도록 할 수 있는 방법은 없나요?

jick의 이미지

pid = fork() < 0이라고 적으면

pid = (fork() < 0) 이렇게 해석됩니다.

원하시는 동작은 (pid = fork()) < 0 이렇게 하셔야 할 듯?