Существует семейство команд Unix, которые будут, вероятно, обслуживать Вас лучше, если Вы будете знать о них для этого типа работы.
Можно использовать эти инструменты для создания "нападений" более целенаправленными, особенно в ситуациях, где Вы знаете процесс неправильного поведения по имени (s).
У меня есть повторяющаяся проблема с Chrome, где с ним в конечном счете нужно иметь дело путем уничтожения его. Я обычно делаю эту команду для уничтожения всех их.
$ killall chrome
Но я мог сделать это также, для контакта только с новейшим процессом:
# to list
$ pgrep -n chrome
23108
# to kill
$ pkill -n chrome
Можно также добавить -f
переключитесь для достижения тех процессов, которые имеют аргументы длинного тракта, что Вы соответствовали бы на вместо просто имени их исполняемого файла.
Например, скажите, что у меня были эти процессы:
$ ps -eaf | grep some
saml 26624 26575 0 22:51 pts/44 00:00:00 some weird command
saml 26673 26624 0 22:51 pts/44 00:00:00 some weird command's friend
saml 26911 26673 8 22:54 pts/44 00:00:00 some weird command's friend
Они - просто оболочки Bash со своим набором ARGV0 к тем именам. Случайно я сделал те процессы с помощью этого приема:
$ (exec -a "some weird command name's friend" bash)
Но скажите, что у меня есть многие из них, и я только хочу следовать за определенным набором их, потому что у них есть "друг" в их командных строках. Я мог сделать это:
$ pgrep -f friend
26673
26911
И если были несколько их, и я хотел следовать за новейшим, добавить -n
переключитесь назад в соединение:
$ pgrep -fn friend
26911
Можно также использовать регулярные выражения при включении в список -f
переключатель, таким образом, они работали бы, например:
$ pgrep -f "weird.*friend"
26673
26911
Можно проверить имена процессов дважды с помощью -l
переключатель:
$ pgrep -f "weird.*friend" -l
26673 some weird command's friend
26911 some weird command's friend
Или скажите pgrep
перечислять идентификаторы процесса разграничило использование запятой (,
):
$ pgrep -f "weird.*friend" -d,
26673,26911
Можно сделать прохладные вещи как это:
$ ps -fp $(pgrep -f weird -d,)
UID PID PPID C STIME TTY TIME CMD
saml 26624 26575 0 22:51 pts/44 00:00:00 some weird command
saml 26673 26624 0 22:51 pts/44 00:00:00 some weird command's friend
saml 26911 26673 0 22:54 pts/44 00:00:00 some weird command's friend
Я использовал бы вышеупомянутое, чтобы быть более выборочным в следовании за высоким процессом ЦП. Вы могли использовать подход уничтожения использования этих методов:
# newest guys
$ pkill -nf vlc ; pkill -nf opensnap
# kill all of these
$ killall vlc; killall opensnap
Взгляд на их загрузки ЦП:
$ top -b -n 1 | grep -E $(pgrep -f "weird.*friend" -d\|) | grep -v grep
26911 0.1 112m 106m 6408 848 4900 1512 0 0 S 20 0 0.0 some weird command's friend
26673 0.1 112m 106m 6392 848 5020 1504 0 0 S 20 0 0.0 some weird command's friend
Здесь я изменил разделитель от запятой (,
) иначе. этот переключатель -d,
, к каналу (|
) иначе. этот переключатель -d\|
, так, чтобы я мог использовать его в a grep
. Выполнение этого возвратит идентификаторы процесса как это:
$ pgrep -f "weird.*friend" -d\|
26673|26911
Мы затем вставляем их в grep -E ...
управляйте, таким образом, мы можем отфильтровать вывод от top
на основе определенных идентификаторов процесса.
Это могло бы походить на большой изгиб назад, но мы теперь знаем с уверенностью, что идентификаторы процесса, которые мы используем, являются только теми связанными с дать процессом, названным "странным. *friend".
Отсюда можно найти процесс с самым высоким ЦП и уничтожить его, если Вы действительно хотите пойти тем путем.
$ top -b -n 1 | grep -E $(pgrep -f "weird.*friend" -d\|) | \
grep -v grep | sort -nk14,14 | tail -1
26911 0.1 112m 106m 6408 848 4900 1512 0 0 S 20 0 0.0 some weird command's friend
Вышеупомянутые шоу отсортированный вывод от top
(14-м) столбцом CPU. Это отсортировано от самого низкого до самого высокого, таким образом, мы проводим последнюю строку (tail -1
) который был бы самым высоким процессом ЦП "странный. *friend" процессы.
Попробуйте
/ nix / store /...- oraclejdk-8u60 /
Intellij ожидает корень JAVA_HOME
, и добавляет сам bin / java
.