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 |