
RedHat LinuxインスタンスでJavaプロセスが実行されています。
問題は、殺した後も再び現れるということです。どこを見るべきか分からない。私はcrontabに行きましたが、運がありません。
PPIDを見てみましたが、初期化(1)を指しています。
ソースを見つける方法を知っていますか?
答え1
いくつかの可能性があります(いくつかは他の答えで言及されています)。
- 頻繁に実行されるシステムまたはユーザーcronjob、
- SysV initでディレクティブを含む
/etc/inittab
サービスエントリrespawn
、 - systemdではユニットファイル
Restart
オプションがno
、 - Upstartでは、ディレクティブを含むサービス構成ファイル
respawn
、 - プロセス監視ツール(例:
monit
または - これは特定のサービスの一時的な監視プロセスです。
興味深い新しいツール(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 -ef
Javaベースのプログラムに関連するプロセスを見つける必要があります。 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=18182
ppid=17176