Как я могу уничтожить особый поток процесса?

С zsh:

print -rl -- **/?*.*(D.:e) | uniq -c |sort -n

Шаблон **/?*.* соответствия все файлы, которые имеют расширение в текущем каталоге и его подкаталогах рекурсивно. Спецификатор шарика D позволить zsh пересеките даже скрытые каталоги и рассмотрите скрытые файлы, . выбирает только регулярные файлы. Модификатор истории сохраняет только расширение файла. print -rl печать одно соответствие на строку. uniq -c считает последовательные идентичные объекты (результат шарика уже отсортирован). Заключительный вызов к sort сортирует расширения по количеству использования.

21
27.12.2019, 15:41
4 ответа

Потоки являются неотъемлемой частью процесса и не могут быть уничтожены снаружи. Существует функция pthread_kill, но она только применяется в контексте самого потока. Из документов в ссылке:

Обратите внимание, что pthread_kill () только заставляет сигнал быть обработанным в контексте данного потока; действие сигнала (завершение или останавливающийся) влияет на процесс в целом.

26
27.01.2020, 19:43
  • 1
    +1. только добавить здесь. в рамках процесса можно использовать pthread_kill () для отправки сигналов в отдельный поток. можете быть Вы, может добавить некоторый обработчик сигналов, которые делают это. –  Hemant 23.08.2010, 16:59
  • 2
    @hemant: Предположим, что MS Word использует отдельный поток для, проверяют правописание. Уничтожение того потока не должно снижать все это, если это не разработано тот путь. Почему процесс не может существовать без того потока в ситуациях как они? –  Lazer 24.08.2010, 07:27
  • 3
    Ну, я предполагаю, что Вы могли разработать модель потоков для независимого политика от родительского процесса, но позволяющий вне процессов уничтожать потоки внутрипроцесса, но это открывает кучу проблем относительно безопасности, управления процессами и целостности системы, что я не думаю, любой разработчик системы охотно подвергся бы. Поточная обработка достаточно трудна без подобных головных болей. Уничтожение потока с внутренней части не является проблемой, потому что работа сделана родительским процессом, который считается ответственный, если какие-либо проблемы возникают и могут быть уничтожены - автоматически или иначе. –  gvkv 24.08.2010, 12:16
  • 4
    , "если это не разработано тот путь": главная причина для использования потоков состоит точно в том так, чтобы можно было совместно использовать ресурсы. Это скорее похоже на наезд на половину дома. –  pjc50 02.03.2011, 16:55
  • 5
    @Lazer, один поток не может проверить орфографию в то же время, что и другой поток обновляет текст, потому что Вы вводите. Из-за этого, чтобы иметь фоновый поток проверки правописания, это должно сделать что-то, любят, захватывают блокировку, чтобы препятствовать тому, чтобы другой поток изменил текст, сделал копию некоторых слов, выпустил блокировку, затем проверил скопированные слова в фоновом режиме. Если бы Вы, оказалось, уничтожили его, в то время как это содержало блокировку, Вы подвесили бы другой поток, как только Вы пытались ввести. Многопоточные приложения полны, предают зависимости земле как это. –  psusi 03.05.2012, 22:20

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

6
27.01.2020, 19:43
  • 1
    И что относительно того, чтобы отправить другие сигналы от командной строки? –  yucer 15.02.2018, 16:38
  • 2
    @yucer простофили установки, я не уверен, что понимаю то, что Вы спрашиваете. –  David Schwartz 15.02.2018, 19:27
  • 3
    , который я означаю отправлять другому сигналу от списка, показанного, "уничтожает-l". Я ищу способ управлять, чтобы особый поток вывел отслеживание стека, для наблюдения то, что оно делает. –  yucer 01.03.2018, 19:03
  • 4
    @yucer Это будет определенным для платформы. Некоторые действительно позволяют управлять, чтобы особый поток вывел стек. Лично, я нашел легче только использовать сценарий для присоединения отладчика (как gdb) к процессу управляйте, чтобы все потоки вывели стек и затем отсоединились. –  David Schwartz 01.03.2018, 20:04

Вдобавок к ответу @gkv можно смотреть на функцию pthread_cancel(3), часть <pthread.h>. Из страницы справочника:

pthread_cancel () функция отправляет запрос отмены к потоку потока. То, ли и когда целевой поток реагирует на запрос отмены, зависит от двух атрибутов, которые находятся под контролем того потока: его состояние cancelability и тип.

1
27.01.2020, 19:43

Можно найти tgkill () полезным. Это - Linux, конкретный, как страница справочника упоминает.

tgkill () отправляет сигнал сигнала в поток с идентификатором потока tid в группе потока tgid. (В отличие от этого, уничтожьте (2), может только использоваться для отправки сигнала в процесс (т.е. группа потока) в целом, и сигнал будет поставлен произвольному потоку в рамках того процесса.)

1
27.01.2020, 19:43
  • 1
    Это не рассматривает вопрос, который был о том, как уничтожить поток, не, как отправить сигнал в поток. –  David Schwartz 15.02.2018, 19:28

Теги

Похожие вопросы