GUI 기반 애플리케이션이 백그라운드에서 쉘 명령을 실행합니까?

웹 자칼

Windows에서 불과 2 일 전에 Ubuntu 16.04로 마이그레이션했습니다. Unity 데스크톱을 커스터마이즈 할 수있는 방법이 마음에 듭니다. 저는 데스크탑 환경의 모양과 느낌을 가지고 놀고 있습니다. Windows에서와 마찬가지로 화면 하단에 런처가 있기를 원했습니다. 인터넷 검색에서 다음과 같은 명령을 찾았습니다.

gsettings set com.canonical.Unity.Launcher launcher-position Bottom

또한 작업을 완료하기위한 unity-tweak-tool 및 dconf 편집기가 있습니다. 그러나 이것들은 일을 처리하는 GUI 접근 방식입니다.

내 질문은 다음과 같습니다.

  • 이러한 GUI 기반 응용 프로그램도 백그라운드에서 동일한 명령을 실행합니까?
  • 이러한 응용 프로그램의 내부 작업을 엿보는 방법은 무엇입니까? 내 말은, 버튼을 클릭 할 때마다 실행되는 명령을 실제로 볼 수있는 방법이 있습니까?
  • 이러한 응용 프로그램은 백그라운드에서 터미널을 열고 이러한 명령을 실행합니까?

여기에 대한 대답 은 프로세스의 표준 파일 설명자를 얻는 방법을 알려줍니다. 그러나 나는 출력에서 ​​아무것도 얻지 못했습니다.

또한이 strace -p pid -o output.txt명령은 파일에 엄청난 양의 텍스트를 던집니다.

요컨대, GUI 응용 프로그램을 사용하여 명령 줄에서 작업하는 것과 동일한 작업을 수행합니까?

세르지 콜로 디아즈 니

이러한 GUI 기반 응용 프로그램도 백그라운드에서 동일한 명령을 실행합니까?

예, 아니오. dconf설정 데이터베이스에 기록 하지만 다른 방법을 사용할 수 있습니다. Python으로 작성된 프로그램은 gi.repository.Gio모듈을 사용하거나 (많이 사용하기 때문에 알고 있음) 대신 gsettings을 호출하여 외부 명령으로 사용할 수 있으며 subprocess.Popen(['gsettings','org.some.schema','some-key','value'])기본적으로 쉘 명령으로 실행됩니다. AC 프로그램은 비슷한 것을 사용 gio.h하거나 아마도 라이브러리를 사용하거나 파이썬에서 exec()와 같은 일을하기 위해 함수 패밀리를 사용할 수도 있습니다 Popen. 따라서 제목 질문에 답하려면 "GUI 기반 애플리케이션이 백그라운드에서 셸 명령을 실행합니까?" 가능하지만 앱이 작성된 모든 언어에 대한 라이브러리가 있기 때문에 필요하지 않을 수 있으며 새 프로세스를 생성하는 것보다 라이브러리 함수를 사용하는 것이 조금 더 빠를 것입니다.

라이브러리 / 모듈로 수행되는 방법에 대한 샘플을 제공하려면 내 런처 목록 표시기 의 소스 코드를 살펴보십시오 . 거기에 Gio.Settings클래스 의 인스턴스를 생성하고 원하는 목록 유형에 따라 Unity 런처를 수정하는 데 사용 하는 함수를 작성했습니다 .

이러한 응용 프로그램의 내부 작업을 엿보는 방법은 무엇입니까? 내 말은, 버튼을 클릭 할 때마다 실행되는 명령을 실제로 볼 수있는 방법이 있습니까?

아니요. 버튼을 누르거나 창 요소를 클릭 할 때 해당 앱의 프로그래밍 언어에서 어떤 명령이 실행되는지 확인하려면 불가능합니다. 가능한 경우 응용 프로그램의 소스 코드를 읽으십시오. 를 사용 dconf watch /하여 변경되는 설정을 볼 있지만 수행 방법은 볼 없습니다.

기술적으로 디버거 작동 방법을 알고 메모리 주소를 읽고 어셈블리 언어를 알고 있다면 앱이 CPU 및 메모리 수준에서 수행하는 작업을 알 수 있습니다. 이를 소프트웨어 리버스 엔지니어링이라고하며 보안 전문가가 악성 소프트웨어를 분석하고 합법적 인 소프트웨어의 취약점을 발견하기 위해 자주 사용합니다.

이러한 응용 프로그램은 백그라운드에서 터미널을 열고 이러한 명령을 실행합니까?

아니요, 연결된 터미널이 없습니다. 많은 프로그램 dconf이 사용자 데이터베이스 위치를 알고 거기에 작성합니다. dbus프로그램이 신호를 보낼 수있는 프로세스 간 통신 버스도 있습니다 . 프로그램은 "이봐, 저에게 메시지입니다!"

추가

  • 응용 프로그램이 다른 응용 프로그램을 실행할 수 있습니까? 예, 표준 fork()execve()시스템 호출을 통해 수행됩니다 . Linux 및 기타 * nix 시스템에서 프로세스를 만드는 본질은 주로이 두 가지를 기반으로합니다. 내장되지 않은 명령을 실행하기위한 쉘 메커니즘은 특히이를 많이 사용합니다. 대화 형으로 실행할 때

    $ ls 
    

    쉘은를 통해 새로운 프로세스를 생성 할 것이며 fork(), 그 프로세스 execve()는 시작될 것 ls입니다. execve()새로운 분기 된 프로세스가 어떻게 될 것이기 때문 ls입니다. pipe()시스템 호출의 출력을 다시 읽어 도움이 될 것입니다 ls. 파이프 메커니즘이 작동하는 방식을 이해하기 위해 파이프와 리디렉션의 차이점은 무엇입니까?에 대한 내 대답을 읽는 것이 좋습니다. 이는 단순한 |연산자가 아니라 실제로 시스템 호출입니다.

  • 응용 프로그램이 셸 명령을 실행할 수 있습니까? 아니요. 셸 구문은 셸 자체에서만 이해됩니다. 그러나 할 수있는 일은 명령 줄 -c스위치 로 셸을 시작하고 적절한 명령을 제공하는 것입니다. 사용자 지정 바로 가기는 실행 파일에서 작동하고 구문을 이해하기위한 쉘이 없기 때문에 GNOME 또는 기타 데스크탑 환경에서 설정된 사용자 지정 바로 가기에 자주 사용됩니다. 따라서 예를 들어 bash -c 'xdotool key Ctrl+Alt+T'간접적으로 xdotool명령을 실행하거나 bash -c 'cd $HOME/Desktop; touch New_File'바로 가기를 통해 데스크톱에 새 파일을 만들 수 있습니다. 이것은 쉘을 명시 적으로 사용하고 있기 때문에 쉘 변수를 사용할 수 있다는 점에서 특히 흥미로운 예입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

GUI 기반 애플리케이션이 백그라운드에서 쉘 명령을 실행합니까?

분류에서Dev

백그라운드에서 GUI 애플리케이션을 실행하고 나중에 다시 연결

분류에서Dev

쉘 명령을 실행할 수있는 OS X 애플리케이션

분류에서Dev

GUI없이 GUI 애플리케이션을 실행하는 방법 (헤드리스 서버의 데몬으로서 GUI 애플리케이션)?

분류에서Dev

iOS 애플리케이션은 기본적으로 백그라운드 모드에서 실행됩니다.

분류에서Dev

CPU 집약적 인 애플리케이션이 백그라운드에서 실행될 때 멀티 코어 프로그래밍을 수행합니까?

분류에서Dev

psiTurk 쉘에서`debug` 명령을 실행하기 전에 데이터베이스를 포맷합니까?

분류에서Dev

Windows 10에 설치된 모든 애플리케이션을 표시하기 위해 단일 명령을 실행하려면 어떻게해야합니까?

분류에서Dev

Java GUI 애플리케이션에서 서블릿을 호출합니까?

분류에서Dev

Python에서 HTML 기반 레이아웃 GUI 애플리케이션을 만드는 방법은 무엇입니까?

분류에서Dev

Ubuntu : at 명령을 사용하여 GUI 애플리케이션 실행

분류에서Dev

기존 터미널 SCM 세션의 vim에서 쉘 명령을 어떻게 실행합니까?

분류에서Dev

Android에서 기본 애플리케이션을 실행하려면 루트 권한이 필요합니까?

분류에서Dev

iOS 애플리케이션을 백그라운드에서 영원히 계속 실행

분류에서Dev

자체 호스팅 .net 코어 mvc 애플리케이션에서 장기 실행 또는 반복 작업을 어떻게 실행해야합니까?

분류에서Dev

emacs 쉘에서 이전 명령을 어떻게 실행합니까?

분류에서Dev

애플리케이션을 실행하기위한 Java 코드

분류에서Dev

GUI 애플리케이션에 명령 줄을 삽입하는 방법

분류에서Dev

쉘 스크립트의 명령이 이전 명령 실행을 완료하기 위해 대기합니까?

분류에서Dev

C 애플리케이션에서 쉘 스크립트 실행

분류에서Dev

파이프 및 tee 명령을 사용하여 백그라운드에서 실행되는 명령의 반환 값 가져 오기

분류에서Dev

Visual Studio에서 C ++로 GUI 애플리케이션을 작성하는 코드가 콘솔 애플리케이션과 다른 이유는 무엇입니까?

분류에서Dev

백그라운드에서 작업을 수행하는 WPF 애플리케이션

분류에서Dev

내 애플리케이션이 살아 있고 백그라운드에서도 파괴되지 않은 경우에만 백그라운드에서 BLE 스캔을 실행하려면 어떻게해야합니까?

분류에서Dev

Flutter : 기기 용으로 미리 컴파일 된 애플리케이션을 빌드 할 수 없습니다. iPhone에서 애플리케이션 실행 오류

분류에서Dev

백그라운드에서 암호 입력이 필요한 sudo 명령을 어떻게 실행합니까?

분류에서Dev

.bat 파일을 통해 독립 실행 형 RCP 기반 애플리케이션에 자격 증명 전달

분류에서Dev

Google Colab에서 웹 애플리케이션을 실행하는 일반적인 방법이 있습니까?

분류에서Dev

대시 앱 렌즈가 반환 한 아이콘에서 애플리케이션 실행 명령을 얻습니다.

Related 관련 기사

  1. 1

    GUI 기반 애플리케이션이 백그라운드에서 쉘 명령을 실행합니까?

  2. 2

    백그라운드에서 GUI 애플리케이션을 실행하고 나중에 다시 연결

  3. 3

    쉘 명령을 실행할 수있는 OS X 애플리케이션

  4. 4

    GUI없이 GUI 애플리케이션을 실행하는 방법 (헤드리스 서버의 데몬으로서 GUI 애플리케이션)?

  5. 5

    iOS 애플리케이션은 기본적으로 백그라운드 모드에서 실행됩니다.

  6. 6

    CPU 집약적 인 애플리케이션이 백그라운드에서 실행될 때 멀티 코어 프로그래밍을 수행합니까?

  7. 7

    psiTurk 쉘에서`debug` 명령을 실행하기 전에 데이터베이스를 포맷합니까?

  8. 8

    Windows 10에 설치된 모든 애플리케이션을 표시하기 위해 단일 명령을 실행하려면 어떻게해야합니까?

  9. 9

    Java GUI 애플리케이션에서 서블릿을 호출합니까?

  10. 10

    Python에서 HTML 기반 레이아웃 GUI 애플리케이션을 만드는 방법은 무엇입니까?

  11. 11

    Ubuntu : at 명령을 사용하여 GUI 애플리케이션 실행

  12. 12

    기존 터미널 SCM 세션의 vim에서 쉘 명령을 어떻게 실행합니까?

  13. 13

    Android에서 기본 애플리케이션을 실행하려면 루트 권한이 필요합니까?

  14. 14

    iOS 애플리케이션을 백그라운드에서 영원히 계속 실행

  15. 15

    자체 호스팅 .net 코어 mvc 애플리케이션에서 장기 실행 또는 반복 작업을 어떻게 실행해야합니까?

  16. 16

    emacs 쉘에서 이전 명령을 어떻게 실행합니까?

  17. 17

    애플리케이션을 실행하기위한 Java 코드

  18. 18

    GUI 애플리케이션에 명령 줄을 삽입하는 방법

  19. 19

    쉘 스크립트의 명령이 이전 명령 실행을 완료하기 위해 대기합니까?

  20. 20

    C 애플리케이션에서 쉘 스크립트 실행

  21. 21

    파이프 및 tee 명령을 사용하여 백그라운드에서 실행되는 명령의 반환 값 가져 오기

  22. 22

    Visual Studio에서 C ++로 GUI 애플리케이션을 작성하는 코드가 콘솔 애플리케이션과 다른 이유는 무엇입니까?

  23. 23

    백그라운드에서 작업을 수행하는 WPF 애플리케이션

  24. 24

    내 애플리케이션이 살아 있고 백그라운드에서도 파괴되지 않은 경우에만 백그라운드에서 BLE 스캔을 실행하려면 어떻게해야합니까?

  25. 25

    Flutter : 기기 용으로 미리 컴파일 된 애플리케이션을 빌드 할 수 없습니다. iPhone에서 애플리케이션 실행 오류

  26. 26

    백그라운드에서 암호 입력이 필요한 sudo 명령을 어떻게 실행합니까?

  27. 27

    .bat 파일을 통해 독립 실행 형 RCP 기반 애플리케이션에 자격 증명 전달

  28. 28

    Google Colab에서 웹 애플리케이션을 실행하는 일반적인 방법이 있습니까?

  29. 29

    대시 앱 렌즈가 반환 한 아이콘에서 애플리케이션 실행 명령을 얻습니다.

뜨겁다태그

보관