Как Вы уничтожаете все процессы Linux, которые являются более старыми, чем определенный возраст?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

66
задан Mark Harrison 9 May 2016 в 06:11
поделиться

6 ответов

Используя PS правильный путь. Я уже сделал что-то подобное прежде, но не имею источника удобным. Обычно - PS имеет опцию сказать его, какие поля показать и по которому можно отсортировать. Можно отсортировать вывод ко времени выполнения, grep процесс, Вы хотите и затем уничтожаете его.

HTH

0
ответ дан abyx 24 November 2019 в 15:00
поделиться

Для чего-либо более старого, чем один день,

ps aux

даст Вам ответ, но это раскрывается к дневной точности, которая не могла бы быть столь же полезной.

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   7200   308 ?        Ss   Jun22   0:02 init [5]
root         2  0.0  0.0      0     0 ?        S    Jun22   0:02 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   Jun22   0:18 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    Jun22   0:00 [watchdog/0]

, Если Вы находитесь на Linux или другой системе с/proc файловой системой В этом примере, можно только видеть, что обрабатывают 1, работал с 22 июня, но никакой признак времени это было запущено.

stat /proc/<pid>

даст Вам более точный ответ. Например, вот точная метка времени для процесса 1, который PS показывает только как Jun22:

ohm ~$ stat /proc/1
  File: `/proc/1'
  Size: 0               Blocks: 0          IO Block: 4096   directory
Device: 3h/3d   Inode: 65538       Links: 5
Access: (0555/dr-xr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2008-06-22 15:37:44.347627750 -0700
Modify: 2008-06-22 15:37:44.347627750 -0700
Change: 2008-06-22 15:37:44.347627750 -0700
22
ответ дан Mark Harrison 24 November 2019 в 15:00
поделиться

Таким образом можно получить список десяти самых старых процессов:

ps -elf | sort -r -k12 | head -n 10
9
ответ дан ggasp 24 November 2019 в 15:00
поделиться

Найденный ответом, который работает на меня:

предупреждение: это найдет и уничтожит длительные процессы

ps -eo uid,pid,etime | egrep '^ *user-id' | egrep ' ([0-9]+-)?([0-9]{2}:?){3}' | awk '{print $2}' | xargs -I{} kill {}

(Где идентификатор пользователя является идентификатором определенного пользователя с продолжительными процессами.)

второе регулярное выражение соответствует времени, которое имеет дополнительный дневной показатель, сопровождаемый на час, минуту и второй компонент, и так составляет по крайней мере один час в длине.

36
ответ дан Kelvin 24 November 2019 в 15:00
поделиться

выполните ps -aef . это покажет вам время, когда процесс начался. Затем с помощью команды date найдите текущее время. Вычислите разницу между ними, чтобы определить возраст процесса.

2
ответ дан 24 November 2019 в 15:00
поделиться

Perl Proc :: ProcessTable сделает свое дело: http://search.cpan.org/dist/Proc-ProcessTable/

Вы можете установить его в debian или ubuntu с помощью sudo apt-get install libproc-processingstable-perl

Вот однострочный:

perl -MProc::ProcessTable -Mstrict -w -e 'my $anHourAgo = time-60*60; my $t = new Proc::ProcessTable;foreach my $p ( @{$t->table} ) { if ($p->start() < $anHourAgo) { print $p->pid, "\n" } }'

Или, в более точном формате, поместите это в файл с именем process.pl:

#!/usr/bin/perl -w
use strict;
use Proc::ProcessTable;
my $anHourAgo = time-60*60;
my $t = new Proc::ProcessTable;
foreach my $p ( @{$t->table} ) {
    if ($p->start() < $anHourAgo) {
        print $p->pid, "\n";
    }
}

, затем запустите perl process.pl

. Это даст вам большую гибкость и 1-секундное разрешение при запуске. время.

7
ответ дан 24 November 2019 в 15:00
поделиться
Другие вопросы по тегам:

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