exec에 의해 실행된 명령이 성공했는지 확인하는 방법은 무엇입니까?

exec에 의해 실행된 명령이 성공했는지 확인하는 방법은 무엇입니까?

run 명령을 사용하면 exec명령 실행이 완료된 후 상위 쉘이 종료됩니다. 실행된 명령이 exec성공적으로 실행되었는지 확인하는 방법은 무엇입니까?

답변1

'd 프로그램을 exec성공적으로 사용 했다면exec바꾸다당신의 껍질. 'd exec프로그램의 종료 상태는 쉘을 실행하는 상위 프로세스로 다시 전송됩니다.

exec의 종료 상태를 다음 줄로 설명할 수 있는 유일한 방법은 execexec 호출이 실패한 경우입니다. 일반적으로 요청된 명령이 없거나 파일을 실행할 수 없는 경우에만 발생합니다. 옵션 해결 문제는 exec 프로그램이 시작된 후 해결되므로 여기에는 포함되지 않습니다.

쉘이 프로그램의 종료 코드를 해석하도록 하려면 to exec를 사용하여 이를 수행할 수 없습니다. 셸에서 프로그램을 실행하면 완료되면 종료 상태를 볼 수 있습니다.

자세한 내용은 다음을 참조하세요 man 3 exec. 이 함수 또는 그 자매 함수 중 하나는 쉘이 호출하는 기본 저수준 Unix 함수입니다.

쉘 명령줄에서 사용하는 것이 합리적이라고 생각되는 유일한 이유는 exec쉘에서 사용하는 메모리가 문제가 되는 메모리가 극도로 낮은 시스템이나 분기 문제가 있고 운이 좋게도 사용할 수 있는 시스템에 있다는 것입니다. 셸에서는 새 프로세스를 분기할 수 없으며 문제를 해결하려면 새 프로세스가 하나만 필요합니다.

예를 들어 exec의 일반적인 사용은 쉘 스크립트에서 이루어집니다.

  1. (@chicks에게 감사드립니다.) 애플리케이션이 종료되면 로그인 스크립트에서 신뢰도가 낮은 사용자에게 콘솔을 위임하면 사용자가 셸을 제어할 수 없습니다.

  2. exec'd 프로그램에 대한 전제 조건(환경, ulimit)만 설정하는 쉘 스크립트에서 exec'd 프로그램의 반환 코드가 스크립트를 호출하는 사람에게 직접 반환되기를 원합니다. 실행 중인 프로세스의 PID가 동일하므로 스크립트는 프로세스를 기록할 수 있습니다.

답변2

~에 따르면매뉴얼 페이지 실행:

만약에주문하다지정됨, exec쉘은 반환되어서는 안 됩니다...

따라서 나중에 일부 코드를 얻을 수 있습니다 exec. 이 코드에 도달하면 뭔가 잘못된 것입니다.

   exec foo
   ret=$?
   ## foo was not executed.

그렇지 않으면 셸에서 호출한 호출 스크립트가 exec명령에서 상태를 가져올 수 있습니다 foo.

예를 들어 위와 같이 bash1call bash2, bash2call 을 입력합니다 .exec foo

이 경우 bash1반환 코드는 에서 가져옵니다 foobash2호출에서 오류가 발생합니다 exec foo.

답변3

실행된 명령의 종료 상태를 사용하여 exec명령이 작동하는지 확인할 수 있습니다. 단, 명령이 자체 종료 상태로 의미 있는 작업을 수행하고 알고 싶은 내용이 종료 상태로 인코딩할 수 있을 만큼 간단합니다.

bash exec실행된 명령의 stdout 및 stderr이 보존되는 것처럼 보입니다 . 실행된 명령의 출력을 사용하여 exec작동하는지 확인할 수 있다고 생각합니다.

또한 실행 중인 명령의 권한을 확인하는 것처럼 보이 bash므로 실행 또는 읽기 권한 없이 파일을 제공하면 일부 출력을 얻을 수 있습니다.

관련 정보