散乱プロセスのソースを見つける方法は?

散乱プロセスのソースを見つける方法は?

RedHat LinuxインスタンスでJavaプロセスが実行されています。

問題は、殺した後も再び現れるということです。どこを見るべきか分からない。私はcrontabに行きましたが、運がありません。

PPIDを見てみましたが、初期化(1)を指しています。

ソースを見つける方法を知っていますか?

答え1

いくつかの可能性があります(いくつかは他の答えで言及されています)。

  1. 頻繁に実行されるシステムまたはユーザーcronjob、
  2. SysV initでディレクティブを含む/etc/inittabサービスエントリrespawn
  3. systemdではユニットファイルRestartオプションがno
  4. Upstartでは、ディレクティブを含むサービス構成ファイルrespawn
  5. プロセス監視ツール(例:monitまたは
  6. これは特定のサービスの一時的な監視プロセスです。

興味深い新しいツール(Linuxのみ)は、プロセスが開始された場所に関する追加情報を提供できます。システムマイニング

SysdigはLinuxカーネルのトレースポイント機能を使用してシステム全体に高速ですstrace

たとえば、起動するすべてのプロセスを表示するには、ls次のようにします。

sudo sysdig evt.type=execve and evt.arg.exe=ls

どこかで実行すると、ls次のメッセージが表示されます。

245490 16:53:54.090856066 3 ls (10053) < execve res=0 exe=ls args=--color=auto. tid=10053(ls) pid=10053(ls) ptid=9204(bash) cwd=/home/steved fdlimit=1024 pgft_maj=0 pgft_min=37 vm_size=412 vm_rss=4 vm_swap=0 env=...

返された環境情報が切り捨てられましたが、ptidにはexecveを呼び出したプログラムの名前とpidが見えます。 execve新しいコマンドを実行するためにLinuxのシステムコールが使用されます(他のすべてのexec呼び出しはexecveへのフロントエンドのみです)。

答え2

私はあなたがそれを使用できると信じていますpstree。コマンドは次のように指定できます。

pstree -p PID

上記はJavaアプリケーションのすべての親リストを提供します。

答え3

対応するPPID(親プロセスID)を表示できます。

$ ps -eo pid,ppid,args | grep java

Javaプロセス(2番目の列)のPPIDがある場合は、psそれを再度使用して関連プロセスを見つけます。

$ ps -p [PPID]

編集する:親が1(初期化)の場合最初Javaプロセスの親プロセスは「出産」後に終了します(悲しいです)。したがって、現在、プロセス階層を使用して見つかりません。私が推奨する最初のことは確認することですps -ef。出力内容のみを読み取っても、犯人を見つけることができます。

次に、クローンタブを見てください(すでに行ったが有害ではない):

$ for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done

これにはroot権限が必要です。

まだスケジュールされたJavaプロセスを見ることはできませんか?くそー。別のことを試してみましょう。起動後にJavaプロセスが存在した場合は、起動時にスケジュールされたプログラムを見てください。私は次のようなことを提案したいと思います...

$ grep -iR java /etc/rc*

それでも何も見つからないなら…まあ、アイデアが足りないことを認めます。実際にもう一度見て、ps -efJavaベースのプログラムに関連するプロセスを見つける必要があります。 Javaプロセスを継続的に再生成するデーモンまたは「スターター」に会う必要があります。

答え4

親が誰であるかわからない場合は、次のシステムトラッカーを使用する必要があります。審査

次のコマンドを使用してロギングを有効にできます。

auditctl -a exit,always -S execve -F path=/usr/bin/rrdtool

次に、/var/log/audit/audit.log次の行を見つけます。

type=SYSCALL msg=audit(1414027338.620:6232): arch=c000003e syscall=59
success=yes exit=0 a0=7fdea0e4db23 a1=7fffec7c5220 a2=7fffec7c87d0
a3=7fdea1b559d0 items=2 ppid=17176 pid=18182 auid=1000 uid=1000 gid=1000 
euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts8 
ses=2 comm="sh" exe="/bin/dash" key=(null)

(読みやすくするために複数行に分割します。)あなたが探しているルージュプロセスに興味があるか、それを識別し、exe="/bin/dash"それを実行した親プロセスを識別します。pid=18182ppid=17176

関連情報