쉘은 Linux의 모든 프로세스의 상위 프로세스입니다.

쉘은 Linux의 모든 프로세스의 상위 프로세스입니다.

저는 쉘 범위와 환경에 대해 더 깊이 이해하려고 노력해 왔습니다. export VARIABLE=VALUE 나는 이것을 수행하면 서브쉘에서 어떻게 사용할 수 있는지 에 대해 읽었습니다 . 그래서 떠오르는 질문 하나 드리고 싶습니다.

제가 올바르게 이해했다면 스크립트 파일을 통해 바이너리 프로그램을 실행하면 리눅스(debian 가정)에서 터미널을 통해 설정된 환경 변수가 스크립트 파일에 의해 실행되는 모든 프로그램에 표시되기 때문에 환경 변수를 볼 수 있게 됩니다.

그래서 제 질문과 혼란은 모든 쉘의 부모인 쉘이 하나 있다는 것입니다. 계층구조가 좀 헷갈리네요. 데비안에서 터미널을 열고 를 입력하면 export VARIABLE=VALUE바탕 화면을 두 번 클릭하여 실행하더라도 모든 스크립트 파일에 표시됩니까?

내 질문이 모호하지 않고 서버 장애에 적합하기를 바랍니다.

답변1

쉘이든 아니든 모든 프로세스는 계층 구조를 형성합니다. 상위 프로세스가 하위 프로세스의 환경을 관리하기 위해 명시적인 조치를 취하지 않는 한, 환경 변수는 상위 프로세스에서 하위 프로세스로 전달됩니다. 대부분의 시스템에서 init이 프로세스는 프로세스 트리의 루트에 있지만 임베디드 환경과 같이 상황은 다를 수 있습니다. 실행하면 pstree -a트리의 모든 프로세스가 표시됩니다.

하위 프로세스에서 설정한 환경 변수는 상위 프로세스나 형제 프로세스로 전파되지 않으므로 터미널 창에서 변수를 내보내면 해당 창 내에서 시작된 프로세스에만 영향을 미칩니다. 따라서 귀하의 질문에 대한 대답은 '아니오'입니다.

답변2

아니요, X11 세션의 하위 프로세스로 실행되는 셸은 데스크탑을 두 번 클릭하여 시작하는 프로세스의 상위(또는 조상)가 되는 X11 세션의 환경을 변경할 수 없습니다.

일반적인 해결 방법은 일부 구성 메커니즘에 연결하고 필요한 설정을 가져오는 방식으로 두 번 클릭 가능한 도구를 작성하는 것입니다. 이는 홈 디렉터리의 구성 파일이거나 일종의 설정 데몬일 수 있습니다. 최신 X11 데스크탑 환경은 이러한 기능을 기본적으로 실행합니다 dbus.

물론 이는 이러한 기능을 사용할 수 있는 환경에서 실행되도록 특별히 설계된 도구에만 도움이 됩니다. 일반적으로 Java 프로그램이 시스템 전체 구성 파일을 읽도록 할 수 있습니다. 예를 들어 /etc/eat_memory_and_crash.confJava 프로그램 이름이 이라고 가정합니다 eat_memory_and_crash. Java 생태계에서는 이 파일이 XML 파일이라고 가정합니다.

관련 정보