.desktopファイルの実行可能パスから予期されるプロセス名を取得する方法
/ usr / share / applicationsにある.desktopファイルを読んでいますが、実行可能ファイルと同じプロセス名を共有していないものがあるようです(ほとんどの場合)。
プロセス名がになることを見つける方法はありますか?
例:
Chromes.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 2601
PIDを見つけるためのより良い方法はありますか?
.desktopファイルにある情報から検索する必要があることに注意してください。(長い話)
ありがとう
回答
Exec
行によって異なりますが、別の実行可能ファイルを実行するシェルスクリプトの場合もあれば、リンクまたは別の実行可能ファイルを生成する実行可能ファイルの場合もあります。
desktop
ファイルからのみ情報を取得する方法がわかりませんが、1つの解決策はそれを実行することかもしれません...
私は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
シェルスクリプトの場合は組み込み