2

В некоторых языках программирования есть вызовы system() exec(), где я могу запускать команды. Что именно происходит, когда я это делаю? Если я запускаю систему ("ls"), запускает ли он интерпретатор bash для строки? Это делает вызов операционной системы? Что происходит, когда это программа наподобие top, которая изменяет экран терминала вместо постоянного сброса?

Я не совсем уверен, как спросить. Где я могу узнать больше о том, как это работает?

2 ответа2

4

Эта страница описывает это очень хорошо

http://pubs.opengroup.org/onlinepubs/009604499/functions/system.html

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

Так что да, он вызывает интерпретатор bash, при условии, что это командный процессор, определенный реализацией стандартной библиотеки C в этой системе. Создается дочерний процесс, который уничтожается при выполнении команды.

РЕДАКТИРОВАТЬ: Это специфично для C, другие языки могут функционировать по-другому, но обычно это так

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .