Linux

#3 Linux ( 프로그램 실행 )

kminnnee 2022. 11. 22. 18:04

fork() 후 자식프로세스는 부모 프로세스와 똑같은 코드를 실행함 

자식프로세스에게 새 프로그램을 실행하게 하려면 ? 

-> exec() 시스템호출 사용 

 

* int execl( char *path,char* argv0, char* argv1,......,char* argvn,NULL)

* int execv( char *path,char * argv[])

// p 가 붙은 것들은 경로로 실행파일을 지정함 , 따라서 실행파일의 이름만 지정해서 인자에 넣어준다

* int execlp( char *file,char* argv0, char* argv1,......,char* argvn,NULL)

* int execvp( char *gile,char* argv[])

 

char *path : 프로그램의 상대/절대 경로를 입력 

ex ) /bin/vi

char *file : 프로그램의 이름

ex ) vi

#include<stdio.h>

int main()
{
	printf("부모 프로세스를 시작합니다 \n");
    if(fork() == 0 ) {
    	execl( "/bin/ls","ls","-a",NULL);
        fprintf(stderr,"fail");
        exit(1);
       }
       printf("부모 프로세스 종료");
  }
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main(int argc,char* argv[])
{
        int pid;
        pid = fork();
        printf("부모 프로세스를 시작합니다 \n");
            if(pid == 0 ) {
                execvp("ls",&argv[0]);
                fprintf(stderr,"fail");
                exit(1);
         }
       printf("부모 프로세스 종료");
  }

 

exec 뒤에 p 가 붙고 안붙고의 차이를 알 수 있다

'Linux' 카테고리의 다른 글

#4 Linux ( 시그널-alarm() )  (0) 2022.11.23
#2 Linux ( 프로세스 )  (0) 2022.11.22
#1 Linux  (0) 2022.11.02