8.100 EXECUTE_COMMAND_LINE — Выполнение командной строки
- Описание:
-
EXECUTE_COMMAND_LINEвыполняет командную строку, синхронно или асинхронно.Аргумент
COMMANDпередаётся оболочке и выполняется (оболочка —shв системах Unix иcmd.exeв Windows). ЕслиWAITприсутствует и имеет значение false, выполнение команды асинхронно, если система это поддерживает; в противном случае команда выполняется синхронно с помощью вызоваsystemбиблиотеки C.Три последних аргумента позволяют пользователю получить информацию о статусе. После синхронного выполнения
EXITSTATсодержит целочисленный код завершения команды, возвращённый функциейsystem.CMDSTATустанавливается в ноль, если командная строка была выполнена (каким бы ни был код её завершения).CMDMSGприсваивается сообщение об ошибке, если произошла ошибка.Обратите внимание, что функция
systemне обязательно является потокобезопасной. Пользователь обязан гарантировать, что функцияsystemне вызывается одновременно.Для асинхронного выполнения на поддерживаемых целевых системах используются функции POSIX
posix_spawnилиfork. Также устанавливается обработчик сигналов для сигналаSIGCHLD. - Стандарт:
-
Fortran 2008 и более поздние версии
- Класс:
-
Подпрограмма
- Синтаксис:
-
CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ]) - Аргументы:
-
COMMAND Должен быть скаляр типа CHARACTERпо умолчанию.WAIT (Необязательно) Должен быть скаляр типа LOGICALпо умолчанию.EXITSTAT (Необязательно) Должен быть целым числом INTEGERстандартного типа.CMDSTAT (Необязательно) Должен быть целым числом INTEGERстандартного типа.CMDMSG (Необязательно) Должен быть скалярным значением CHARACTERстандартного типа. - Пример:
-
program test_exec integer :: i call execute_command_line ("external_prog.exe", exitstat=i) print *, "Exit status of external_prog.exe was ", i call execute_command_line ("reindex_files.exe", wait=.false.) print *, "Now reindexing files in the background" end program test_exec - Примечание:
-
Так как данный встроенный модуль реализован с использованием вызова функции
system, его поведение, связанное с сигналами, зависит от процессора. В частности, в системах, совместимых с POSIX, сигналы SIGINT и SIGQUIT будут игнорироваться, а SIGCHLD — заблокированы. Поэтому, если родительский процесс будет завершён, дочерний процесс может не быть завершён вместе с ним. - См. также:
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gfortran/EXECUTE_005fCOMMAND_005fLINE.html