У меня была эта проблема в Debian с пустым ~ / .inputrc
файл. Устранена проблема удалением этого файла.
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» в наши дни означает в основном всю ОС, хотя на самом деле это только само ядро.
Потоки 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 количество процессов может превышать это значение, что может привести к сбою приложения.