프로그램이 중개자로서의 쉘 없이 다른 프로그램을 실행할 수 있습니까?

프로그램이 중개자로서의 쉘 없이 다른 프로그램을 실행할 수 있습니까?

이것은 어리석은 질문일 수도 있습니다. Linux용으로 작성된 프로그램(예: Golang으로 작성된)이 시스템 호출을 호출하여 다른 프로그램을 직접 실행할 수 있습니까? 아니면 먼저 셸을 호출하고 다른 프로그램을 실행하도록 해야 합니까? 내 요점은 현재 프로그램을 교체하는 것이 아닙니다. 웹 서버가 있고 program1지속적으로 실행되고 있다고 가정하면 program2커널에 직접 액세스하고 관련 시스템 호출을 사용하여 실행할 수 있습니까, 아니면 먼저 셸을 통해 실행됩니까? 쉘을 사용하지 않는 경우 특정 작업을 수행하기 위해 프로그램에서 쉘을 사용해야 하는 특정 상황이 있습니까? 그렇다면 그것은 무엇입니까? 어떤 정보라도 대단히 감사하겠습니다.

답변1

쉘을 중개자로 사용하지 않고 프로그램을 실행할 수 있습니까?

예: 쉘을 시작하는 것과 정확히 같은 방식입니다.

사용 exec: 그러나 이는 현재 프로세스를 대체합니다.

사용법 fork: 새 프로세스를 만든 다음 exec교체합니다. 쉘은 다른 유용한 시스템 호출을 사용합니다. pipe: 파이프라인을 만듭니다. dup: 파이프를 stdin또는 에 연결합니다 stdout.

일반적으로 이 작업을 수행할 수 있는 더 높은 수준의 라이브러리가 있습니다. 이를 통해 Microsoft의 Windows와 같은 다른 운영 체제에서 코드를 실행할 수 있습니다. 이러한 시스템 호출은 여러 개 결합됩니다(예: 하나의 create_process호출로).

프로세스를 포크한 후 교체하는 것이 느린 것 같습니다. 그렇지 않습니다. MS-Windows에서 스레드를 생성하는 것보다 빠릅니다. fork매우 효율적입니다. 대부분의 작업을 연기하므로 일반적으로 필요하지 않습니다.

다른 프로그램에서 프로그램을 실행할 때 쉘을 사용해야 하는 경우가 있나요?

쉘 스크립트인 경우에만 가능합니다. 그러나 글로빙(globbing), 리디렉션(redirecting) 등의 서비스를 사용하고 싶을 수도 있습니다. 내 생각에 golang에는 이 작업을 수행할 수 있는 충분한 라이브러리가 있으므로 쉘이 필요하지 않습니다.

관련 정보