ダイナミック リンカーを介してすべてのプロセスでいくつかのスタートアップ コードを実行しようとしています。
コードは、プロセスの 0 番目の引数に基づいて処理を行う必要があります。引数は (main の外部からアクセスするより良い方法をご存知の場合はお知らせください) から取得しています/proc/self/cmdline
が、これには 1 つの問題があります。
スクリプトは、0 番目の引数としてシェバン ( なし#!
) を取得します。その場合、次の引数に興味があります。しかし、解釈されたプロセスをネイティブのプロセスと区別するにはどうすればよいでしょうか?
答え1
抽出元の詳細は、(スクリプトなしで)/proc/self/status
にあります。/proc/self/comm
意図された質問:どのプロセスが解釈されたそして、ネイティブどのプロセスが実行される予定なのかを知らなければ、これを行うことはできません。通訳者結局のところ、どのプロセスも呼び出しによって自身の名前を変更できexec
、その結果のプロセスの引数リストに好きなものを使用できます。推測(実行可能ファイルを指す) を引数リストと比較することによって行わ/proc/self/exe
れますが、非インタープリタが子孫の名前を変更して、その使用方法をより明確にする例があるため、これは推測にすぎません。
参考文献:
答え2
Name
プロセスがsを取得するようです
</proc/self/status |grep '^Name'
そして、名前はbasename
実数 0 番目の引数の であるように見えます。
(誰かがより良い答えを提供してくれるかもしれないので、この質問をここに残しておきます)。