.desktop 파일의 실행 경로에서 예상되는 프로세스 이름을 얻는 방법
/usr/share/applications에 있는 .desktop 파일을 읽고 있는데 일부는 실행 파일과 동일한 프로세스 이름을 공유하지 않는 것 같습니다(대부분 공유).
프로세스 이름을 찾는 방법이 있습니까?
예시:
크롬 .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-stable하면 null이 반환됩니다.
하지만 실행 pidof chrome하면 모든 PID가 반환됩니다.
879321 879303 805004 755066 693852 693837 693796 688198 624316 624289 3194 2788 2762 2734 2685 2677 2641 2637 2620 2613 2611 26011
PID를 찾는 더 좋은 방법이 있습니까?
.desktop 파일에 있는 정보에서 검색해야 합니다. (긴 이야기)
감사
답변
라인 에 따라 다르며 Exec, 다른 실행 파일을 실행하는 쉘 스크립트일 수도 있고 다른 실행 파일을 생성하는 링크 또는 실행 파일일 수도 있습니다.
파일 에서만 정보를 얻을 수 있는 방법을 잘 모르겠지만 desktop한 가지 해결책은 파일을 실행하는 것일 수 있습니다...
저는 google-chrome이 없으므로 제 예에서는 크롬을 사용합니다.
# 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
여기서 발생할 가능성이 있는 것은 초기 실행 파일이 exec...()시스템 호출(*)을 사용하여 모든 코드를 새 실행 파일 및 매개변수로 대체하고 매우 동일한 프로세스 ID가 해당 새 코드에 해당하고 에 의해 나열 ps되므로 초기 실행 파일이 실행 파일이 프로세스 목록에서 사라집니다. 이것은 종종 다른 실행 파일에 대한 환경을 설정하는 데 사용됩니다.
(*) 또는 exec쉘 스크립트인 경우 내장