The GNU Fortran Compiler: EXECUTE_COMMAND_LINE

Next: EXIT, Previous: EVENT_QUERY, Up: Intrinsic Procedures [Contents][Index]

### 8.100 `EXECUTE_COMMAND_LINE` — Execute a shell command

Description:

  `EXECUTE_COMMAND_LINE` runs a shell command, synchronously or asynchronously.

  The `COMMAND` argument is passed to the shell and executed (The shell is `sh` on Unix systems, and `cmd.exe` on Windows.). If `WAIT` is present and has the value false, the execution of the command is asynchronous if the system supports it; otherwise, the command is executed synchronously using the C library’s `system` call.

  The three last arguments allow the user to get status information. After synchronous execution, `EXITSTAT` contains the integer exit code of the command, as returned by `system`. `CMDSTAT` is set to zero if the command line was executed (whatever its exit status was). `CMDMSG` is assigned an error message if an error has occurred.

  Note that the `system` function need not be thread-safe. It is the responsibility of the user to ensure that `system` is not called concurrently.

  For asynchronous execution on supported targets, the POSIX `posix_spawn` or `fork` functions are used. Also, a signal handler for the `SIGCHLD` signal is installed.

Standard:

  Fortran 2008 and later

Class:

  Subroutine

Syntax:

  `CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])`

Arguments:

  COMMAND | Shall be a default `CHARACTER` scalar.
  WAIT | (Optional) Shall be a default `LOGICAL` scalar.
  EXITSTAT | (Optional) Shall be an `INTEGER` of the default kind.
  CMDSTAT | (Optional) Shall be an `INTEGER` of the default kind.
  CMDMSG | (Optional) Shall be an `CHARACTER` scalar of the default kind.

Example:

      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

Note:

  Because this intrinsic is implemented in terms of the `system` function call, its behavior with respect to signaling is processor dependent. In particular, on POSIX-compliant systems, the SIGINT and SIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As such, if the parent process is terminated, the child process might not be terminated alongside.

See also:

  SYSTEM

Next: EXIT, Previous: EVENT_QUERY, Up: Intrinsic Procedures [Contents][Index]