как запустить запуск сценария в живом дистрибутиве?

Когда дело доходит до Linux, процессы и потоки по сути одно и то же. То есть они создаются с помощью одного и того же системного вызова: clone.

Если подумать, разница между потоками и процессами заключается в том, какие объекты ядра будут совместно использоваться дочерним и родительским. Для процессов это немного: открытые файловые дескрипторы, сегменты памяти, в которые не производилась запись, возможно, несколько других вещей, которые я не могу придумать навскидку. Для потоков используется гораздо больше объектов, но не все.

Что сближает потоки и объекты в Linux, так это системный вызов unshare. Объекты ядра, которые изначально являются общими, могут быть отменены после создания потока. Таким образом, вы можете, например, иметь два потока одного и того же процесса, которые имеют разное пространство файловых дескрипторов (отменив совместное использование файловых дескрипторов после создания потоков). Вы можете проверить это самостоятельно, создав поток, вызвав unshare в обоих потоках, а затем закрыв все файлы и открыв новые файлы, каналы или объекты в обоих потоках. Затем загляните в /proc/your_proc_fd/task/*/fd и вы увидите, что каждая задача (которую вы создали как поток) будет иметь разные fd.

На самом деле, как создание новых потоков, так и новых процессов являются библиотечными подпрограммами, которые вызывают clone и указывают, какой из объектов ядра является вновь созданным процессом-потоком-штукой amajig (т.е. task ) будет использоваться совместно с вызывающим процессом/потоком.

1
08.12.2015, 20:59
0 ответов

Теги

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