리눅스 exec 예제

-exec sh -c를 사용하여 … {} +는 임의로 복잡한 스크립트를 사용하여 경로 이름 집합을 반복하는 효율적인 방법입니다. exec 명령은 현재 셸 프로세스를 지정된 명령으로 바꿉니다. 일반적으로 명령을 실행하면 새 프로세스가 생성됩니다(포크). exec 명령은 새 프로세스를 생성하지 않습니다. 대신 현재 프로세스가 새 명령과 오버레이됩니다. 즉, exec 명령은 새 프로세스를 만들지 않고 현재 셸 대신 실행됩니다. 여기서 주목해야 할 점은 메모리에서이 스크립트를 대체하는 exec 호출이 있다는 것입니다. 위의 예제에서는 -exec의 가장 일반적인 두 가지 사용 사례를 보여 줍니다: exec 명령을 사용하여 프로세스의 단계와 같이 순차적으로 서로 실행하는 셸 스크립트 집합을 만들 수도 있습니다. 컨트롤을 다음 스크립트로 전송해야 할 때마다 새 프로세스를 생성하는 대신 exec 명령을 실행합니다.

내가 아는 한 그것은 또한 bash 스크립트의 파일 설명자 (예를 들어, STDOUT, STDERR, STDIN)를 리디렉션하는 데 사용됩니다. 기본 프로그램을 실행하기 전에 프로그램에 대한 환경을 수정하려는 경우 스크립트를 작성하는 경우가 많으며, 결국 에는 기본 프로그램을 시작합니다. 그러나 스크립트가 메모리에 남아 있을 필요는 없습니다. 그래서, exec는 이러한 경우에 사용되므로, 메인 프로그램은 어머니 스크립트를 대체 할 수 있습니다. 이 예제에서 보았듯이 exec 작업이있는 find 명령은 정말 강력한 작업을 수행 할 수 있으며 파일 의 하위 집합에서만 특정 작업을 수행해야 할 때 이 명령이 성공적인 조합이 될 수 있습니다. 검색 식과 일치하는 파일에 대한 작업을 정의할 수 있으며, 작업 중에서 더 다양한 작업을 수행할 수 있습니다.이 작업은 -exec과 함께 사용하면 발견된 경로 이름에 따라 임의로 복잡한 스크립트를 만들 수 있으므로 유용합니다. 찾을 수 있습니다. 이러한 예제를 사용 하지 않아야 합니다. 예를 들어 Linux의 exec 명령은 bash 자체에서 명령을 실행하는 데 사용됩니다. 이 명령은 bash를 실행할 명령으로 대체하는 새 프로세스를 만들지 않습니다. exec 명령이 성공하면 호출 프로세스로 돌아가지 않습니다.

루틴 execlp()는 환경 변수 PATH를 사용하여 처리할 실행 방법을 결정하는 것을 제외하고는 동일한 목적을 수행합니다. 따라서 정규화된 경로 이름을 사용할 필요가 없습니다. 함수에 대한 첫 번째 인수는 대신 “ls”일 수 있습니다. 함수 execlp()는 명시적으로 해결될 때 정규화된 이름을 사용할 수도 있습니다. exit() 및 _exit(: C 라이브러리 함수 exit()는 내부적으로 커널 시스템 호출 _exit()를 호출합니다. 커널 시스템 호출 _exit()는 커널이 설명자, 사용 사용 대기 메모리를 닫고 커널 종료 프로세스 정리를 수행하게 합니다. C 라이브러리 함수 exit() 호출은 I/O 버퍼를 플러시하고 내부적으로 _exit()를 호출하기 전에 aditional 정리를 수행합니다. 함수 종료(status)는 실행 수에서 main()에 대한 반환 코드로 “status”를 반환합니다.

자식 프로세스에서 exit(status)를 호출하면 부모 프로세스가 자식의 종료 상태를 검사할 수 있습니다(먼저 종료되는 경우). 이 호출(또는 main(에서 return()으로 호출)을 호출하고 상태 인수를 지정하지 않으면 프로세스가 값을 반환하지 않습니다. exec 명령은 파일 설명자에서 동적으로 열림, 닫기 및 복사하는 셸 스크립트에서도 사용할 수 있습니다. 이를 통해 명령 호출 문자열 대신 셸 스크립트 내부의 다양한 파일에 STDIN, STDERR, STDOUT 및 기타 파일 설명자를 리디렉션할 수 있습니다.

admin