Как найти источник мечущего икру процесса?

При разделении диска Вы освободите все в /usr/local.

Относительно реального вопроса, конечно, можно продолжить использовать программное обеспечение в usr/local. Но знайте, что Ваш диспетчер пакетов не знает об этом, и может очень хорошо обновить (или даже удалить), пакеты, что что-то в /usr/local потребности, и таким образом, это может прекратить работать в любое время.

12
22.10.2014, 17:41
4 ответа

Существует ряд возможностей (некоторые упомянутые в других ответах):

  1. Система или пользователь Cronjob, выполняющие часто,
  2. в Sysv init, AN / etc / inittab Въезд для службы с рукояткой Директива Директива
  3. в Systemd, файл блока с опцией перезапуска , установленном значением, отличному от NO ,
  4. в UPSTART, файл конфигурации услуг с рукояткой Директива
  5. Инструмент мониторинга процессов, такой как Monit , или
  6. процесс Watchdog Ad-Hoc для это конкретное обслуживание.

Интересный новый (только Linux) инструмент, который может обеспечить более проницательность, в котором начался процесс SYSDIG .

SYSDIG использует функции трассировки TracePoint Linux Kernel, чтобы обеспечить то, что значительно быстро, ширина системы .

Например, если я хотел увидеть каждый процесс, начинающий 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 я вижу имя и PID программы Выполнение вызова. Execive - это системный вызов, используемый в Linux, используемый для выполнения новых команд (все остальные вызовы exect - это просто находки для выполнения).

15
27.01.2020, 19:54

Если вы не знаете, кто является родительским, вы должны вам какой-то системный трассировк Auditd

, вы сможете включить в систему:

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 , которые определяют ваш процесс Rouge, который вы хотите искать, и PPID = 17176 , который идентифицирует родитель, который выполнил его.

1
27.01.2020, 19:54

Вы можете посмотреть на его PPID (идентификатор родительского процесса) :

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

После того, как вы получили PPID (вторая колонка) вашего Java процесса, используйте ps снова, чтобы найти связанный с ним процесс:

$ ps -p [PPID]

Edit : если родителю 1 (init), то первый родитель вашего Java процесса умер сразу после "рождения" (как это печально). Из-за этого, вы не можете использовать текущую иерархию процесса, чтобы найти ее. Первое, что я бы порекомендовал вам сделать, это проверить ps -ef. Вы можете найти виновного, просто прочитав вывод.

Затем, посмотрите на crontabs (вы уже сделали это, но это не повредит) :

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

Это потребует привилегий корня.

Все еще не видишь запланированного Java-процесса? Черт возьми. Давай попробуем что-нибудь другое. Если ваш Java-процесс присутствует с момента загрузки, взгляните на программы, схематично расположенные во время загрузки. Я бы предложил что-нибудь вроде...

$ grep -iR java /etc/rc*

Если ты все еще ничего не можешь найти, то... Ну, я признаю, что у меня заканчиваются идеи. Вам действительно стоит еще раз взглянуть на ps -ef и найти процессы, связанные с программами, основанными на Java. Вы должны наткнуться на демона, или "пусковую установку", ответственную за постоянное дыхание вашего Java-процесса.

5
27.01.2020, 19:54

Я считаю, что вы можете использовать PSTREE . Вы можете указать команду как,

pstree -p PID

вышеупомянутая, даст вам список всех родителей приложений Java.

7
27.01.2020, 19:54

Теги

Похожие вопросы