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 будет заблокирован. Таким образом, если родительский процесс завершается, дочерний процесс может не завершиться вместе с ним. - См. также:
Далее: EXIT, Предыдущее: EVENT_QUERY, Вверх: Встроенные процедуры [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gfortran/EXECUTE_005fCOMMAND_005fLINE.html