.desktop 파일의 실행 경로에서 예상 프로세스 이름을 얻는 방법

.desktop 파일의 실행 경로에서 예상 프로세스 이름을 얻는 방법

/usr/share/applications에 있는 .desktop 파일을 읽고 있는데 일부 파일이 실행 파일(대부분)과 동일한 프로세스 이름을 공유하지 않는 것 같습니다.

프로세스 이름을 찾는 방법이 있나요?

예:

Chrome .desktop 파일

[Desktop Entry]
Version=1.0
Name=Google Chrome
Exec=/usr/bin/google-chrome-stable %U
StartupNotify=true
Terminal=false
Icon=google-chrome
Type=Application
Categories=Network;WebBrowser;
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/ftp;x-scheme-handler/http;x-scheme-handler/https;
Actions=new-window;new-private-window;

실행하면 pidof google-chrome-stablenull이 반환됩니다.

하지만 실행하면 pidof chrome모든 PID가 반환됩니다.

879321 879303 805004 755066 693852 693837 693796 688198 624316 624289 3194 2788 2762 2734 2685 2677 2641 2637 2620 2613 11 2601

PID를 찾는 더 좋은 방법이 있습니까?

.desktop 파일에 있는 정보에서 검색해야 합니다. (아주 긴 이야기)

감사해요

답변1

행에 따라 Exec다른 실행 파일을 실행하는 쉘 스크립트, 링크 또는 다른 실행 파일을 생성하는 실행 파일일 수도 있습니다.

파일에서 정보를 얻는 방법을 잘 모르겠지만 desktop한 가지 해결책은 파일을 실행하는 것입니다.

저는 google-chrome이 없으므로 예제에서는 chromium을 사용하고 있습니다.

# Extract the command from desktop file
$ CMD=$(grep -Po "(?<=^Exec=).+\s" /usr/share/applications/chromium.desktop)
$ echo $CMD
/usr/bin/chromium

# Run it
$ CMD &

# Get the PID
$ PID=$(echo $!)
$ echo $PID
5146

# Get process name from PID
$ ps --no-header -p $PID -o comm
chromium

# Get the complete command line + arguments
ps --no-header -p $PID -o cmd
/usr/lib/chromium/chromium --show-component-extension-options --enable-gpu-rasterization

# Terminate process
kill -SIGTERM $PID

답변2

여기서 일어날 수 있는 일은 초기 실행 파일이 exec...()시스템 호출(*)을 사용하여 모든 코드를 새 실행 파일과 인수로 대체하고 정확히 동일한 프로세스 ID가 해당 새 코드에 해당하고 로 나열되므로 ps초기 실행 파일이 실행 파일 실행 파일이 프로세스 목록에서 사라집니다. 이는 일반적으로 다른 실행 파일에 대한 환경을 설정하는 데 사용됩니다.

(*) exec쉘 스크립트라면 내장 명령어입니다.

관련 정보