Linux не различает процессы и потоки?

У меня была эта проблема в Debian с пустым ~ / .inputrc файл. Устранена проблема удалением этого файла.

2
31.12.2018, 01:10
2 ответа

Linux also provides the ability to create threads using the clone() system call. However, Linux does not distinguish between processes and threads. In fact, Linux uses the term task —rather than process or thread— when referring to a flow of control within a program.

Нам нужно различать реальную реализацию и поверхность, которую вы видите.

С точки зрения пользователя (разработчика системного программного обеспечения )есть большая разница :потоки имеют много общих ресурсов (, например. сопоставления памяти -кроме стека, конечно -файловые дескрипторы ).

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

Таким образом, на уровне непосредственного представления потока или процесса нет большой разницы в базовой структуре, дьявол кроется в том, как обрабатывается информация.

Вам также может быть интересно прочитать Реализуются ли потоки как процессы в Linux?


1)Помните, что «Linux» в наши дни означает в основном всю ОС, хотя на самом деле это только само ядро.

4
27.01.2020, 22:02

Потоки Linux реализованы как отдельные процессы, но совместно использующие то же адресное пространство, что и другие потоки. По умолчанию они скрыты в команде ps, но их можно увидеть с флагом -L.

Например:

% ps -fp 2642
UID        PID  PPID  C STIME TTY          TIME CMD
polkitd   2642     1  0 Dec09 ?        00:00:48 /usr/lib/polkit-1/polkitd --no-d

% ps -fLp 2642
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
polkitd   2642     1  2642  0    7 Dec09 ?        00:00:18 /usr/lib/polkit-1/pol
polkitd   2642     1  2680  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol
polkitd   2642     1  2683  0    7 Dec09 ?        00:00:30 /usr/lib/polkit-1/pol
polkitd   2642     1  2685  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol
polkitd   2642     1  2687  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol
polkitd   2642     1  2688  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol
polkitd   2642     1  2692  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol

Мы видим, что polkitdдействительно состоит из 7 потоков. Все они имеют одинаковый идентификатор процесса, но разные идентификаторы потоков (LWP ), но отображаются как разные процессы в списке ps, потому что это разные процессы в ядре.

Это может повлиять, например. на ulimitограничениях. Распространенной проблемой RedHat и его производных является то, что конфигурация PAM по умолчанию ограничивает ваши процессы

.
% cat /etc/security/limits.d/20-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited

В тяжелых веб-приложениях Java количество процессов может превышать это значение, что может привести к сбою приложения.

2
27.01.2020, 22:02

Теги

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