Фон процесс и выполняет что-то с одной командой

код выполняется с той же скоростью, будь то в ядре или в пользовательской земле, но есть вещи, которые код ядра может сделать напрямую, когда пользовательский код должен прыгать через обручи. В частности, код ядра может отображать память приложения напрямую, поэтому он может непосредственно скопировать содержимое файла между памятью приложения и внутренними буферами, из или на которые аппаратные копии. Код пользователя должен либо сделать дополнительную копию через трубу или сокет или сделать более сложную операцию совместного использования памяти.

Кроме того, каждая операция файла должна пройти через ядро ​​- единственным способом для взаимодействия с чем-либо является системный вызов. Если операция файла выполняется полностью внутри ядра, есть только один переход пользователя / ядра, а также одно переход ядра / пользователя для выполнения, что довольно быстро. Если операция файла выполняется другим процессом, должен быть контекстный переключатель между процессами, которые требуют гораздо более дорогой операции в MMU .

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

0
06.11.2014, 11:23
1 ответ

Должен делать то, что вы хотите:

$ ls > /dev/null & echo $!

, потому что вы заставляли фоновую команду в подпроцесс во всех видах способов, первая оболочка не имела фонового процесса и, следовательно, $! не было обновлено.

Теперь фоновый процесс запускается одной и той же оболочкой, который делает для этого ECHO $! Так что теперь это делает то, что вы хотите.

2
28.01.2020, 02:36

Теги

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