나는 집에서 만든 껍질 (아주 간단한 껍질)을 연구 중이다. 내 경로가 내 셸의 변경 가능한 요소가 아니므로 execvp를 사용하는 경로를 결정했습니다. 한 번에 여러 프로세스를 포크하고 실행하는 방법에 대한 논리와 함께 문제가 발생했습니다.포크와 여러 프로세스를 동시에 수행
내 프로그램이 같은 명령으로 작동합니다 :
ls ; echo hello ; cat shell.c
경우 각 ";" 우리는 이러한 프로세스를 동시에 실행하고자 함을 나타냅니다. 그래서 우리 터미널 출력에서 우리는 한꺼번에이 명령들의 혼합을 얻어야합니다.
내가 내 프로그램 작동 방법을 설명하고 싶습니다 정교하게하려면 :
A. Intake full command line into char array with a grab line function
B. Split the char array received from the last function by delimiters and place into an array of char arrays (pointer to pointer).
C. If one of the elements in our array of char arrays is ";" we can assume that multi commands are necessary. This is where I have trouble.
내가 지금까지 나는 그런 포크와 필요가 정확히 얼마나 많은 프로세스를 알고으로 입수했습니다,하지만 난 포장 수없는 것 내 이 모든 함수와 인수를 execvp 함수에 한 번에 전달하는 방법에 대해 머리를 숙십시오. 임시 배열을 사용해야합니까? 나는 이것이 복잡하지 않아야한다는 것을 알고 있지만, 어떤 이유로 그것을 이해할 수는 없다. I는 문자 어레이의 배열을 섭취 따라서 다중 명령들이 (내 분할 선 함수) 필요할 때 설정 내 "MultiCommand는"변수
int launch(char **args){
pid_t pid;
int status;
int i = 0;
if(strcmp(args[0], "quit") == 0){
exit(EXIT_SUCCESS);
}
if(strcmp(args[0], ";") != 0){
printf("Essential Command Found : %s\n", args[0]);
numFork++;
}
if(multiCommand == 1){
//Handle Multicommands here
printf("Multi Commands Handling Here\n");
for(; i < elements - 1; i++){
if(strcmp(args[i], ";") == 0){
if((i + 1) < elements){
printf("Essential Command Found : %s\n", args[i + 1]);
numFork++;
}
}
}
//This is where I need to figure out what to do
printf("Fork: %d times\n", numFork);
}else if (multiCommand == 0){
pid = fork();
if(pid == 0){
execvp(args[0], args);
}else{
wait(&status);
}
}
multiCommand = 0;
elements = 0;
return 1;
}
사이드 노트 :'표준 쉘에서를, '일반적으로 '/'는 백그라운드에서 실행되어 다음 bei를 발생시키는 것을 의미합니다. 이전 작업이 끝날 때까지 기다리지 않고 실행하십시오. – kaylum
실행할 각 프로세스마다 한 번 포크해야합니다. 해당하는 자식은 어떤 명령을 실행할지를 알 수 있습니다 (반드시 확인해야합니다). 'execvp()'시스템 콜은 많은 명령어가 아닌 하나의 명령어만을 실행합니다. 그러나 하나의 명령어는 많은 명령어를 실행하기위한 쉘이 될 수 있습니다. –