명령을 받아 실행하는 작은 쉘 프로그램을 작성하고 있습니다. 사용자가 유효하지 않은 명령을 입력하면 if 문은 -1을 반환합니다. 명령이 올 바르면 명령을 실행하지만 일단 명령을 실행하면 프로그램이 종료됩니다. 내가 그 뒤에 코드 줄을 실행하지 않는다면 내가 뭘 잘못하고 있니? 나는 execvp (command.argv [0], command.argv)를 ls 및 cat 명령으로 테스트 했으므로 작동하는지 확실히 확인했습니다. 여기 내 코드가있다. exec 함수() 가족이 와execvp (command.argv [0], command.argv) 후 프로그램이 중지됩니다.
그래서 현재의 프로세스 이미지가 덮어 씁니다 새로운 프로세스 이미지를 현재 프로세스 이미지를 대체 execvp(3)
의 man page에서
int shell(char *cmd_str){ int commandLength=0; cmd_t command; commandLength=make_cmd(cmd_str, command); cout<< commandLength<<endl; cout << command.argv[0]<< endl; if(execvp(command.argv[0], command.argv)==-1) //if the command it executed nothing runs after this line { commandLength=-1; }else { cout<<"work"<<endl; } cout<< commandLength<<endl; return commandLength; }
정확히'exec *'함수가 어떻게 작동할까요? 그들은 새 프로그램을로드하고 새 프로그램으로 프로그램을 다시 작성합니다. –
@Aaron : 항공기 조종사는 최소한 "작업 할"항공기의 매뉴얼 **을 읽어야합니다. 프로그래머로서의 당신에 대한 기대가 어떠세요? – ereOn