質問: 実行中のプロセスをファイル名で表示しますか? puttyを使用して、自分のサイトがあるlinuxサーバーに接続しています。# ps aux | less 実行中のプロセスを表示します。しかし、これらのプロセスを実行しているファイルを表示したいですか?私も試しました# ps aux | grep <pid> しかし、このエラーが発生します:-bash: syntax error near unexpected token `newline' それを行う正しい方法は何ですか?
回答: まず、ps aux | grep <pid>は、 pid (プロセス識別子)が<pid>で表される特定のプロセスの詳細を表示する場合に便利です。たとえば、(ps aux | grep 'firefox\|user'は、firefoxまたはuserを含む行のみを出力することを意味します):ps aux | grep 'firefox\|user' user pid %cpu %mem vsz rss tty stat start time command terdon 9021 2.5 11.8 1950888 970832 ? sl apr03 108:41 /opt/firefox/firefox したがって、firefoxinstanceのpidは9021です。したがって、実行しようとしているコマンドを使用するには、<pid>を9021に置き換えます。ps aux | grep 9021 terdon 9021 2.5 11.5 1948776 942640 ? sl apr03 109:03 /opt/firefox/firefox さて、「これらのプロセスを実行しているファイルを表示する」という意味がわかりません。これらのプロセスが使用しているファイルを表示する場合は、ps auxがその1つの方法です。次のコマンドを使用して、ファイル/usr/share/doc/nano/faq.htmlを開いたとします。 firefox /usr/share/doc/nano/faq.html firefoxを使用してpsが開いたファイルを確認できました。ps aux | grep firefox terdon 31763 18.7 1.0 682916 84352 pts/10 sl+ 17:10 0:02 firefox /usr/share/doc/nano/faq.html 開かれたファイルは、firefoxに渡される引数の1つとして表示されます。 pidが異なることに注意してください(現在は31763ではなく9021になっています)。これは、実行中のすべてのプログラムに固有のpidがあるためです。別の便利なコマンドはtopです。 -cスイッチを指定して実行すると、コマンドに渡された引数が表示され、-u <your user>を使用すると、ユーザー名で開始されたプロセスのみが表示されます(<your user>を実際のユーザーに置き換えます名前):top -c -u terdon これは私のローカルマシンでの出力です(ユーザーterdonは2つのプロセスしか実行していません)。top - 17:14:41 up 3 days, 49 min, 14 users, load average: 0.48, 0.54, 0.55 tasks: 228 total, 1 running, 226 sleeping, 0 stopped, 1 zombie %cpu(s): 7.1 us, 5.5 sy, 0.0 ni, 86.5 id, 0.0 wa, 0.0 hi, 0.9 si, 0.0 st kib mem: 8187940 total, 8007220 used, 180720 free, 349264 buffers kib swap: 8191996 total, 5556 used, 8186440 free, 4173004 cached pid user pr ni virt res shr s %cpu %mem time+ command 31573 terdon 20 0 24900 5576 1684 s 0.0 0.1 0:00.20 bash 31763 terdon 20 0 666m 77m 28m s 0.0 1.0 0:02.39 firefox /usr/share/doc/nano/faq.html topによって表示される情報の説明については、suの関連する質問の my answer を参照してください。