Как мне не показать процессы, которые я не могу уничтожить командой kill + [pid number]? - PullRequest
1 голос
/ 05 июня 2019

В школе я работал над проектом "сделай менеджер задач в linux" Я использовал команду ps -u [username] -o stat,cmd --sort=-pid | awk '{print $2$3$4}' для получения имен cmd из команды ps Если я использую эту команду, я вижу часть результата следующим образом:

awk{print$2$3$4}
ps-u[username]

когда я пытаюсь завершить эти процессы, используя pid каждого процесса, он не завершит их, потому что их PID не существует.

Как я мог не показать эти awk{print$2$3$4} и ps-u[username] ???

Я не мог придумать ни одной идеи

ps -u [username] -o stat,cmd --sort=-pid | awk '{print $2$3$4}'

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Решение JNevill исключает каждый запущенный процесс awk или ps. Я думаю, что лучше исключить процессы на tty. Кроме того, вы не получаете полные команды с тем, как вы используете awk. Я (вроде) решил это используя sed.

$ ps -u $USER -o stat,tty,cmd --sort=-pid | grep -v `ps -h -o tty $$` | sed -r  's/.*  (.*)$/\1/'

Вы можете проверить это с помощью следующей команды. Я открыл man ps в другом терминале.

$ ps -u $USER -o stat,tty,cmd --sort=-pid | grep -v `ps -h -o tty $$` | grep -E '(ps|grep)'
S+   pts/14   man ps

Недостатком является то, что, кроме исключая ps и grep, оно также исключает вашу заявку.

0 голосов
/ 05 июня 2019

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

Есть несколько способов подавить их. Я думаю, что проще всего будет отфильтровать их в вашем скрипте awk.

ps -u [username] -o stat,cmd --sort=-pid | awk '$2!="awk" && $2!="ps"{print $2$3$4}'
...