The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"как убить PID thread?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"как убить PID thread?"  +/
Сообщение от httpd (ok) on 24-Окт-11, 22:38 
всем привет,

у меня есть сервер centos 5, сталкнулся с такой прблемой:
завис 1 тред в процессе апача, ушел в бесконечный цикл. нужно было убить его один, в процессе около 50 тредов было.
пытался сделать просто kill ID-треда, не убивает.  пришлось убивать весь процесс.
Вопрос: как убить 1 тред из процесса, не убивая весь тред? я так понимаю kill это не умеет делать, есть какая нить утилита или како йсигнал послать треду? или его только родительский процесс может убить?

ps. kill -9 не пробовал.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "как убить PID thread?"  +/
Сообщение от guest email(??) on 25-Окт-11, 09:54 
Действительно интересно.
tgkill() в ядре давно есть, т.е. послать сигнал конкретному треду можно, а вот что будет мъютексами и прочими ресурсами которые могут быть у этого треда загадка...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "как убить PID thread?"  +/
Сообщение от httpd (ok) on 25-Окт-11, 23:30 
> Действительно интересно.
> tgkill() в ядре давно есть, т.е. послать сигнал конкретному треду можно, а
> вот что будет мъютексами и прочими ресурсами которые могут быть у
> этого треда загадка...

да тож нашел этот сигнал, ток утилитки нету готовой для таких целей..

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "как убить PID thread?"  +/
Сообщение от pavlinux (ok) on 30-Окт-11, 16:39 
> Действительно интересно.
> tgkill() в ядре давно есть,

А ещё есть pthread_kill() и чё?!

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

6. "как убить PID thread?"  +/
Сообщение от guest email(??) on 30-Окт-11, 17:00 
> А ещё есть pthread_kill() и чё?!

Разжевать разницу между pthread_self()и gettid() или начнешь сам маны читать?

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "как убить PID thread?"  –1 +/
Сообщение от pavlinux (ok) on 30-Окт-11, 20:12 
>> А ещё есть pthread_kill() и чё?!
> Разжевать разницу между pthread_self()и gettid() или начнешь сам маны читать?

Не, лучше между pthread_timedjoin_np() и gettimeofday(), смысл одинаковый получится.

Ну а для начала научи как из баша иль через свою утиль, получить THREAD ID
скажем у всех тредов firefox_а иль тандырбёрда

---

Так же для разминки мозга. Можешь открыть файл, который сейчас открыт в OpenOffice,
и именно с той позиции SEEK_CUR, на которой сейчас находиться в Open Office?

---

Далее. Могёшь перехватить открытый сокет в режиме дуплексирования на уровне приложений?
Перехват пакетов и promisc режимы сетевухи запрещён администратором.

-----

Волшебные хаки по перехвату SYSCALL ядра естественно никто не разрешит делать.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "как убить PID thread?"  +2 +/
Сообщение от guest email(??) on 30-Окт-11, 21:59 
> Ну а для начала научи как из баша иль через свою утиль,
> получить THREAD ID
> скажем у всех тредов firefox_а иль тандырбёрда

УУУ как все запущенно то...
man clone в районе CLONE_THREAD затем man ps про ключики -e,L и f


Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "как убить PID thread?"  –1 +/
Сообщение от pavlinux (ok) on 30-Окт-11, 22:03 
>> Ну а для начала научи как из баша иль через свою утиль,
>> получить THREAD ID скажем у всех тредов firefox_а иль тандырбёрда
> УУУ как все запущенно то...
> man clone в районе CLONE_THREAD
> затем man ps про ключики -e,L и f

# ps -eLf | grep firefox


pavel    15705  3273 15705  0    1 22:01 ?        00:00:00 /bin/sh /usr/bin/firefox https://www.opennet.ru/openforum/vsluhforumID9/9265.html#
pavel    15714 15705 15714 15   25 22:01 ?        00:00:18 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15716  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15717  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15718  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15719  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15720  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15721  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15722  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15737  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15739  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15740  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15741  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15742  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15743  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15749  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15751  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15755  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15756  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15757  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15758  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15762  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15763  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15765  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15768  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    15714 15705 15777  0   25 22:01 ?        00:00:00 /usr/lib64/firefox/firefox-bin https://www.opennet.ru/openforum/vsluhforumID9/9265
pavel    16737     1 16737  0    1 22:01 ?      

# kill 15758
# ps -eLf | grep firefox

Куй!

---

Учим различия  PID/GID/PPID/EID/TID, и без дела непи...дим.  


Повтор:

Как из баша иль через свою утиль, получить THREAD ID скажем
у всех тредов firefox_а иль тандырбёрда

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "как убить PID thread?"  +/
Сообщение от guest email(??) on 30-Окт-11, 22:05 
> Ну а для начала научи как из баша иль через свою утиль,
> получить THREAD ID скажем у всех тредов firefox_а иль тандырбёрда

В смысле зачитать тебе вслух ман ps?
Ну или давай шелл, помогу набрать ps -eLf и покажу колонку LWP


Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "как убить PID thread?"  +/
Сообщение от pavlinux (ok) on 30-Окт-11, 22:12 
>> Ну а для начала научи как из баша иль через свою утиль,
>> получить THREAD ID скажем у всех тредов firefox_а иль тандырбёрда
> В смысле зачитать тебе вслух ман ps?
> Ну или давай шелл, помогу набрать ps -eLf и покажу колонку LWP

Ты идиот? Ты в глаза THREAD ID видел?

На, дрочи до посинения;


#include <stdio.h>
#include <pthread.h>

int main() {

        return printf("%zd\n", pthread_self());
}

Флажочег -pthread для ГЦЦ низабуть, а то мало ли чё, вдруг вчера только Юних увидел.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

14. "как убить PID thread?"  +/
Сообщение от guest email(??) on 30-Окт-11, 22:17 
> Ты идиот? Ты в глаза THREAD ID видел?

Можно я по еврейски отвечу? спасибо
Ты идиот? Разницу между TID в ядре и pthread_t понимаешь?


Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

20. "как убить PID thread?"  +/
Сообщение от pavlinux (ok) on 15-Ноя-11, 02:29 
>> Ты идиот? Ты в глаза THREAD ID видел?
> Можно я по еврейски отвечу? спасибо
> Ты идиот? Разницу между TID в ядре и pthread_t понимаешь?

Ну дибил, убей тогда один, на выбор, тред фаерокса.

И задолбали уже своим "знанием манов",
вопрос был - Как убить тред из вне.
Ответ - никак!

Всё нах...,  закрыли тему. pgkill/pthread - засуньте себе в анус.
  

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

12. "как убить PID thread?"  +/
Сообщение от guest email(??) on 30-Окт-11, 22:15 
> Учим различия  PID/GID/PPID/EID/TID, и без дела непи...дим.

Бинго!
Вылазим из танка, рисуем утиль делающий tgkill(PID, TID[да да тот самый LWP из ps], SIG);
и наслаждаемся. Правда скорее всего наслаждаться будем упавшим ff, ну да потому такой утилиты и нет.

PS: спасибо, как обычно повеселил.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

13. "как убить PID thread?"  +/
Сообщение от pavlinux (ok) on 30-Окт-11, 22:16 
> PS: спасибо, как обычно повеселил.

Не, веселят меня бакланы читающие маны.


Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

15. "как убить PID thread?"  +/
Сообщение от Вова on 31-Окт-11, 15:38 
>> А ещё есть pthread_kill() и чё?!
> Разжевать разницу между pthread_self()и gettid() или начнешь сам маны читать?

нет, ну это было более-менее адекватное сообщение, делая скидку автору, это же Павлинукс. Потом он, как обычно, сел в лужу в нескольких темах сразу,но это не так важно, в принципе.
Абстрагируясь от автора, мы можем предположить, что данным конкретным сообщением автор пытается выразить сомнение в возможности доставки сигналов конкретным потокам извне, и это сомнение вполне резонно. Некоторое время назад в линукс потоки имели различные пиды и имели дополнительный процесс "менеджер потоков", раньше - до nptl-реализации, и вот тогда можно было посылать сигналы отдельным потокам, и даже этому "процессу-менеджеру",ну а сейчас - нет.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

16. "как убить PID thread?"  +/
Сообщение от guest email(??) on 31-Окт-11, 15:52 
> Абстрагируясь от автора, мы можем предположить, что данным конкретным сообщением автор
> пытается выразить сомнение в возможности доставки сигналов конкретным потокам извне, и
> это сомнение вполне резонно. Некоторое время назад в линукс потоки имели
> различные пиды и имели дополнительный процесс "менеджер потоков", раньше - до
> nptl-реализации, и вот тогда можно было посылать сигналы отдельным потокам, и
> даже этому "процессу-менеджеру",ну а сейчас - нет.

Вов, Вы то не павлин, проверьте сами tgkill() работает ровно так, как обещает ман.
ntpl как раз использует clone c CLONE_THREAD т.е. триды самые, что ни наесть ядерные. А вот с _не_ ntpl, т.е. с любой реализацией нитей в юзерспейсе оно действительно не работает, ну да ведь этого никто и не обещал.

На самом деле в случаях когда, мы заранее уверенны, что наши нити написаны, таким образом, что по сигналу не тупо сдохнут, а отпустят все свои ресурсы, то из tgkill() получится вполне юзабельная вещь. Которую можно воткнуть в *ctl утилиту идущую в комплект к демону.

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "как убить PID thread?"  +/
Сообщение от Вова on 01-Ноя-11, 12:39 
>> Абстрагируясь от автора, мы можем предположить, что данным конкретным сообщением автор
>> пытается выразить сомнение в возможности доставки сигналов конкретным потокам извне, и
>> это сомнение вполне резонно. Некоторое время назад в линукс потоки имели
>> различные пиды и имели дополнительный процесс "менеджер потоков", раньше - до
>> nptl-реализации, и вот тогда можно было посылать сигналы отдельным потокам, и
>> даже этому "процессу-менеджеру",ну а сейчас - нет.
> tgkill() работает ровно так, как обещает ман.

Да, действительно, так и есть -  линукс можно точно указывать поток, который должен получить сигнал. Если быть дотошным, то ман обещает несколько более удобный интерфейс, но это уже мелочи. Ман в моей системы пишет про поддержку -1 в качестве пида/номера группы потоков, в ядре же  жесткий возврат EINVAL на значение pid <= 0, в kernel/signal.c. Пришлось использовать  syscall(SYS_tgkill, pid, tid, signum), но это детали, главное то, что реально можно указывать конкретный поток из ps -aLF.

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

2. "как убить PID thread?"  +/
Сообщение от httpd (ok) on 25-Окт-11, 22:31 
> всем привет,
> у меня есть сервер centos 5, сталкнулся с такой прблемой:
> завис 1 тред в процессе апача, ушел в бесконечный цикл. нужно было
> убить его один, в процессе около 50 тредов было.
> пытался сделать просто kill ID-треда, не убивает.  пришлось убивать весь процесс.
> Вопрос: как убить 1 тред из процесса, не убивая весь тред? я
> так понимаю kill это не умеет делать, есть какая нить утилита
> или како йсигнал послать треду? или его только родительский процесс может
> убить?
> ps. kill -9 не пробовал.

мда kill -9 на тред убивает весь процесс ((

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "как убить PID thread?"  +/
Сообщение от pavlinux (ok) on 30-Окт-11, 16:36 
> всем привет,
> у меня есть сервер centos 5, сталкнулся с такой прблемой:
> завис 1 тред в процессе апача, ушел в бесконечный цикл. нужно было
> убить его один, в процессе около 50 тредов было.
> пытался сделать просто kill ID-треда,

А как ты узнал thread ID у внешнего процесса ??? :)  

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "как убить PID thread?"  +/
Сообщение от httpd (ok) on 31-Окт-11, 23:42 
> А как ты узнал thread ID у внешнего процесса ??? :)

pstree показывает PID  и его треды:

# pstree -p 22079
httpd.worker(22079)-+-{httpd.worker}(22081)
                    |-{httpd.worker}(22082)
                    |-{httpd.worker}(22083)
                    |-{httpd.worker}(22084)
                    |-{httpd.worker}(22085)
                    `-{httpd.worker}(22086)

через ps также можно вытащить их.


Господа, получается нет возможности убить 1 тред из процесса стандартными юникс утилитами? остается только писать скрипт на С/С++ с вызовом соответсвующего сигнала ?

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

19. "как убить PID thread?"  +/
Сообщение от Вова on 01-Ноя-11, 13:13 
>[оверквотинг удален]
>         |-{httpd.worker}(22083)
>            
>         |-{httpd.worker}(22084)
>            
>         |-{httpd.worker}(22085)
>            
>         `-{httpd.worker}(22086)
> через ps также можно вытащить их.
> Господа, получается нет возможности убить 1 тред из процесса стандартными юникс утилитами?
> остается только писать скрипт на С/С++ с вызовом соответсвующего сигнала ?

Да. По идее в пакете procps должно быть что-то вроде tgkill, довольно простая утилита.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру