Як я вбиваю процеси в Ubuntu?


149

Як я вбиваю всі процеси, що працюють за допомогою мого власного некореневого акаунта?

У мене є кілька обертових smbd-процесів, які я викликав у своїй машині Windows, і тому я зв’язався з сервером linux і хочу вбити ці процеси спінінгу. Я не маю повноважень перезавантажувати послуги або перезавантажувати машину.

Відповіді:


172

Щоб вбити всі процеси, на які ви маєте дозвіл на вбивство, просто запустіть команду

kill -15 -1або kill -9 -1залежно від бажаної поведінки (використовувати man killдеталі)

Щоб вбити конкретний процес, скажімо, firefox, просто запустіть

pkill firefoxабо killall firefoxзалежно від поведінки, яку ви хочете: в чому різниця між 'killall' та 'pkill'?

Якщо ви хочете побачити, які процеси запущені, використовуйте команду

ps -ef

Якщо ви хочете знайти всі процеси за допомогою bob користувача, це може допомогти

pgrep -l -u bob

або

ps -ef | grep bob

4
Я б почав з того kill -15 -1, і переходитиму лише до того, kill -9 -1якщо будуть вперті процеси, і я знаю, що роблю . Випадково вбивати процеси, які можуть бути посеред транзакції бази даних, - це не те, що потрібно робити так випадково, як ви пропонуєте.
Саймон Ріхтер

Також названий процес Firefox firefox-bin.
Саймон Ріхтер

Ні, ви можете спробувати запустити killall firefoxі killall firefox-binпобачити , що працює. Я згоден з вашим першим коментарем.
ste_kwr

Дякуємо @ste_kwr, працював із твоїми вказівками, боровся два дні ...
Java.beginner

Перевага в тому, що не потрібні PID-адреси, полягає в роботі cron. Використання імен виходить чисто.
SDsolar

56

Використовуйте sudo kill <pid>абоsudo killall <process-name>


3
Я не думаю, що це стосується цього питання, ви використовуєте sudo - ОП не має таких привілеїв, як зазначено в питанні.
pl1nk

ОП не має привілеїв, відредагуйте свою відповідь, або вона може бути видалена або перетворена в коментар як "не відповідь".
Останній

Якщо у нього немає привілеїв, йому просто доведеться вбити <pid> або killall <ім'я_процесу> Я просто використав це в моєму не-кореневому акаунті, я б не зміг це зробити, якби не ця відповідь .
Шайлін Ортіз

20

Спробуємо щось більше:

sudo apt-get install htop 

topКоманда є традиційним способом для перегляду використання ресурсів вашої системи і побачити процеси , які займають більшість системних ресурсів. Вгорі відображається перелік процесів, в тій, де використовується найбільше процесора вгорі.

htopвідображає ту саму інформацію з простішим для розуміння макетом. Це також дозволяє вибирати процеси за допомогою клавіш зі стрілками та виконувати дії, наприклад, вбивати їх або змінювати їх пріоритет, за допомогою Fклавіш.


16

Можна використовувати

ps -ax | grep application name 

Якщо ви шукаєте тип firefox типу терміналу ps -ax | grep firefox, він показує ідентифікатор процесу відповідної програми. Ви можете зупинити цю програму killкомандою, якщо процес id = 1317,

kill -9 1317

13

Я б користувався xkill. Введіть xkillу термінал і натисніть у вікні, або введіть xkillі ідентифікатор процесу, і він буде припинений.

Знайдено більше інформації xkillна x.org.


1
Використовуйте його друге за частотою після того, як любите його. +1
Сергій Колодяжний

xkill не працює в цьому випадку ...
PythoNic

@PythoNic, в якому випадку це?
Алвар

1
Він хоче вбити процес без вікон, який також не пов'язаний із сервером X, як мені здається ... (У всякому разі, гарний інструмент.)
PythoNic


7

Я б розбив вашу проблему на 2 частини:

1) Як я знаходжу розпочаті мною процеси? Виконати це:

ps -u `whoami`

Це про whoamiвсяк випадок, якщо ви не знаєте імені облікового запису, який ви використовуєте, інакше просто введіть назву облікового запису без зворотних лапок.

Тут буде перераховано всі процеси, які можна видалити з вашого облікового запису.

2) psКоманда перелічить номер процесу, TTY, Час та CMD. Ідентифікатор процесу - це перший стовпець. Використовуйте це число, щоб вбити процес. Будьте обережні, вбиваючи процес. Ви можете щось зламати, якщо ви вб'єте неправильний процес. Для вбивства процесу ви використовуєте killкоманду, яка надсилає SIGNAL до процесу. Сигнал вказує, що повинен робити процес . Наприклад, при надсиланні в -1процес буде запропоновано завантажити файл конфігурації; надсилання a -2еквівалентно натисканню клавіші Control + C у цьому процесі; -9змусить ядро ​​відмовитися від процесу, не повідомляючи його процесу.

Припустимо, що ps -u whoamiповернув щось подібне

  PID TTY          TIME CMD
 4333 pts/1    00:00:00 fish
 4335 ?        00:00:00 fishd
 4816 ?        00:00:00 intellij
 4868 ?        00:50:42 java
 4939 ?        00:00:19 fsnotifier64
 7667 ?        02:49:08 firefox
 7698 ?        00:00:00 unity-webapps-s

І ви хотіли вбити firefoxпроцес за його ідентифікатором процесу, тоді ви зробите:

kill -1 7667

Потім ви повторно запустите ту саму psкоманду і перевірте, чи процес все ще працює. Якщо він все ще працює, то зробіть

kill -2 7667

працюючи по дорозі -9.

Щоб знищити всі процеси, розпочаті вашим обліковим записом, введіть kill <level> -1. Те саме, що і раніше: працюйте по своєму шляху -9.

Якщо ви знаєте назву процесу, ви можете просто піти killall <processname>, де саме ви намагаєтеся вбити. Наприклад: killall fish(риба, в цьому сенсі, є Дружнім Інтерактивним Шеллом).

Документацію killallможна знайти тут: http://manpages.ubuntu.com/manpages/hardy/man1/killall.1.html


3

За допомогою цієї програми ви можете переглянути списки програм

встановити htop

sudo apt-get install htop

для перегляду процесу та вбивства Ви можете встановити його та просто видалити

введіть тут опис зображення


2

... Усі процеси в Linux реагують на сигнали. Сигнали - це спосіб осн наказувати програмам припиняти або змінювати свою поведінку.

Як надсилати сигнали процесів за допомогою PID

Найпоширеніший спосіб передачі сигналів програмі - це команда kill.

Як ви могли очікувати, функцією цієї утиліти за замовчуванням є спроба вбити процес:

kill PID_of_target_process

Це передає сигнал TERM в процес. Сигнал TERM повідомляє процес просити припинити. Це дозволяє програмі виконувати операції очищення та виходити плавно.

Якщо програма погано поводиться і не виходить, коли дається сигнал TERM, ми можемо ескалювати сигнал, передаючи сигнал KILL:

kill -KILL PID_of_target_process

Це спеціальний сигнал, який не надсилається програмі.

Натомість воно надається ядру операційної системи, яке вимикає процес. Це використовується для обходу програм, які ігнорують надіслані їм сигнали ...


2

Я написав невеликий сценарій, який я написав, щоб вбити (в моєму випадку) Skype:

kill -s 9 `ps aux | grep skype | head -n 1 | cut -f4 -d" "`

Але я виявив, що стільки, як це працювало тоді, не працювало на наступний день, тому що під був різної довжини, і там кількість пробілів була різною

Потім я натрапив на цей сайт і спробував

pgrep -l -u justin

що зручно виводити процеси у форматі

[pid] [name]

Тому я підкоригував свій код у сценарії до цього:

kill -s 9 `pgrep -l -u justin | grep skype | cut -f1 -d" "`

Це означає, що всі процеси justinзапущені (це може бути змінено на будь-яке ім'я користувача), на grepякий шукається skype(це можна змінити у вашому процесі), а потім передається той рядок, до cutякого потім зчитується тільки PID, і, нарешті, використовується той ПІД в killкоманді вбити його.


Ви могли кинути -l, і побігти pgrep -u justin skype, і вбити: pkill -u justin skype(або pkill -KILL -u justin skypeвідправити SIGKILL).
муру

Це, безумовно, шлях Unix. Молодці ви обоє. Я буду використовувати цей.
SDsolar

1

Ось простий скрипт python, який я написав, killProcess.py, який сприйме що-небудь як вхідний і вбити це.

Я написав цей сценарій, тому що у мене є багато процесів python або node, які я хочу вбити індивідуально і програмно. Я не можу використовувати "killall python", оскільки це зупинить процеси, які мені потрібні, щоб продовжувати працювати.

Назвіть файл "killProcess.py", а потім додайте ім'я сценарію, який ви хочете зупинити. Наприклад: python killProcess.py runnablePoller.py знищить файл runnablePoller.py

import os;
import sys;
for arg in sys.argv:
    if(arg!="killProcess.py"):
        process=arg;
        print(process);
processes =os.popen("ps -ef | grep "+process).read();
processes=processes.split("\n");
processes=processes[0].split(" ");
#print(processes);
for p in processes:
    try:
        pid=int(p);
        print(pid); 
        break;
    except:
        continue;

os.system("kill "+str(pid));

0

Я використовував наступну процедуру для вбивства процесу в Ubuntu ::

Крок 1. Отримайте pid процесу за допомогою grep, або ви також можете використовувати -C також ::

ps aux | -C 'filename'

або

ps -ef | -C 'filename'

або

ps aux | grep 'filename'

або

ps -ef | grep 'filename' 

Крок 2: Відмітьте номер pid.

Крок 3: Використовуйте команду 'kill' разом із номером pid як:

kill pidnumber

0

Ctrl+ Alt+ Deleteможна встановити, щоб надати вам доступ до диспетчера завдань, звідки легко вбивати процеси за допомогою декількох клацань, і для мене менша вимога до запам’ятовування команд, які можуть бути згубними, якщо зробити їх неправильно:

http://ubuntuhandbook.org/index.php/2013/07/use-ctrl-alt-del-task-manager-ubuntu/

https://www.itsmarttricks.com/a-guide-to-kill-pkill-and-killall-commands-to-stop-the-process-in-linux-kill-process-linux/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.