Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Используя PS правильный путь. Я уже сделал что-то подобное прежде, но не имею источника удобным. Обычно - PS имеет опцию сказать его, какие поля показать и по которому можно отсортировать. Можно отсортировать вывод ко времени выполнения, grep процесс, Вы хотите и затем уничтожаете его.
HTH
Для чего-либо более старого, чем один день,
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
Таким образом можно получить список десяти самых старых процессов:
ps -elf | sort -r -k12 | head -n 10
Найденный ответом, который работает на меня:
предупреждение: это найдет и уничтожит длительные процессы
ps -eo uid,pid,etime | egrep '^ *user-id' | egrep ' ([0-9]+-)?([0-9]{2}:?){3}' | awk '{print $2}' | xargs -I{} kill {}
(Где идентификатор пользователя является идентификатором определенного пользователя с продолжительными процессами.)
второе регулярное выражение соответствует времени, которое имеет дополнительный дневной показатель, сопровождаемый на час, минуту и второй компонент, и так составляет по крайней мере один час в длине.
выполните ps -aef
. это покажет вам время, когда процесс начался. Затем с помощью команды date
найдите текущее время. Вычислите разницу между ними, чтобы определить возраст процесса.
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-секундное разрешение при запуске. время.