
run 명령을 사용하면 exec
명령 실행이 완료된 후 상위 쉘이 종료됩니다. 실행된 명령이 exec
성공적으로 실행되었는지 확인하는 방법은 무엇입니까?
답변1
'd 프로그램을 exec
성공적으로 사용 했다면exec
바꾸다당신의 껍질. 'd exec
프로그램의 종료 상태는 쉘을 실행하는 상위 프로세스로 다시 전송됩니다.
exec의 종료 상태를 다음 줄로 설명할 수 있는 유일한 방법은 exec
exec 호출이 실패한 경우입니다. 일반적으로 요청된 명령이 없거나 파일을 실행할 수 없는 경우에만 발생합니다. 옵션 해결 문제는 exec 프로그램이 시작된 후 해결되므로 여기에는 포함되지 않습니다.
쉘이 프로그램의 종료 코드를 해석하도록 하려면 to exec
를 사용하여 이를 수행할 수 없습니다. 셸에서 프로그램을 실행하면 완료되면 종료 상태를 볼 수 있습니다.
자세한 내용은 다음을 참조하세요 man 3 exec
. 이 함수 또는 그 자매 함수 중 하나는 쉘이 호출하는 기본 저수준 Unix 함수입니다.
쉘 명령줄에서 사용하는 것이 합리적이라고 생각되는 유일한 이유는 exec
쉘에서 사용하는 메모리가 문제가 되는 메모리가 극도로 낮은 시스템이나 분기 문제가 있고 운이 좋게도 사용할 수 있는 시스템에 있다는 것입니다. 셸에서는 새 프로세스를 분기할 수 없으며 문제를 해결하려면 새 프로세스가 하나만 필요합니다.
예를 들어 exec의 일반적인 사용은 쉘 스크립트에서 이루어집니다.
(@chicks에게 감사드립니다.) 애플리케이션이 종료되면 로그인 스크립트에서 신뢰도가 낮은 사용자에게 콘솔을 위임하면 사용자가 셸을 제어할 수 없습니다.
exec'd 프로그램에 대한 전제 조건(환경, ulimit)만 설정하는 쉘 스크립트에서 exec'd 프로그램의 반환 코드가 스크립트를 호출하는 사람에게 직접 반환되기를 원합니다. 실행 중인 프로세스의 PID가 동일하므로 스크립트는 프로세스를 기록할 수 있습니다.
답변2
~에 따르면매뉴얼 페이지 실행:
만약에주문하다지정됨,
exec
쉘은 반환되어서는 안 됩니다...
따라서 나중에 일부 코드를 얻을 수 있습니다 exec
. 이 코드에 도달하면 뭔가 잘못된 것입니다.
exec foo
ret=$?
## foo was not executed.
그렇지 않으면 셸에서 호출한 호출 스크립트가 exec
명령에서 상태를 가져올 수 있습니다 foo
.
예를 들어 위와 같이 bash1
call bash2
, bash2
call 을 입력합니다 .exec foo
이 경우 bash1
반환 코드는 에서 가져옵니다 foo
.
bash2
호출에서 오류가 발생합니다 exec foo
.
답변3
실행된 명령의 종료 상태를 사용하여 exec
명령이 작동하는지 확인할 수 있습니다. 단, 명령이 자체 종료 상태로 의미 있는 작업을 수행하고 알고 싶은 내용이 종료 상태로 인코딩할 수 있을 만큼 간단합니다.
bash
exec
실행된 명령의 stdout 및 stderr이 보존되는 것처럼 보입니다 . 실행된 명령의 출력을 사용하여 exec
작동하는지 확인할 수 있다고 생각합니다.
또한 실행 중인 명령의 권한을 확인하는 것처럼 보이 bash
므로 실행 또는 읽기 권한 없이 파일을 제공하면 일부 출력을 얻을 수 있습니다.