The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
как убить PID thread?, !*! httpd, 24-Окт-11, 22:38  [смотреть все]
всем привет,

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

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

  • как убить PID thread?, !*! guest, 09:54 , 25-Окт-11 (1)
    Действительно интересно.
    tgkill() в ядре давно есть, т.е. послать сигнал конкретному треду можно, а вот что будет мъютексами и прочими ресурсами которые могут быть у этого треда загадка...
    • как убить PID thread?, !*! httpd, 23:30 , 25-Окт-11 (3)
      > Действительно интересно.
      > tgkill() в ядре давно есть, т.е. послать сигнал конкретному треду можно, а
      > вот что будет мъютексами и прочими ресурсами которые могут быть у
      > этого треда загадка...

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

    • как убить PID thread?, !*! pavlinux, 16:39 , 30-Окт-11 (5)
      > Действительно интересно.
      > tgkill() в ядре давно есть,

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

      • как убить PID thread?, !*! guest, 17:00 , 30-Окт-11 (6)
        > А ещё есть pthread_kill() и чё?!

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

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

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

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

          ---

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

          ---

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

          -----

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

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

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

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

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

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

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

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

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

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

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

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

    • как убить PID thread?, !*! httpd, 23:42 , 31-Окт-11 (17)
      > А как ты узнал 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 тред из процесса стандартными юникс утилитами? остается только писать скрипт на С/С++ с вызовом соответсвующего сигнала ?

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

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




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

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