Spec-Zone.ru › Octave 6

36.5 Управление дочерними процессами

Octave включает некоторые высокоуровневые команды, такие как system и popen, для запуска дочерних процессов. Если вы хотите запустить другую программу для выполнения некоторой задачи и затем посмотреть её вывод, вам, вероятно, понадобятся эти функции.

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

: system ("строка")
: system ("строка", возвращать_вывод)
: system ("строка", возвращать_вывод, тип)
: [статус, вывод] = system (…)

Выполняет командную строку, заданную строкой.

Если функция system вызывается с одним или несколькими аргументами вывода, или если необязательный аргумент возвращать_вывод равен true и дочерний процесс запускается синхронно, то вывод команды возвращается как переменная. В противном случае, если дочерний процесс выполняется синхронно, его вывод передаётся в стандартный вывод. Для перенаправления вывода команды, выполненной с помощью system, через просмотрщик страниц, используйте команду, подобную

[~, text] = system ("cmd");
more on;
disp (text);

или

more on;
printf ("%s\n", nthargout (2, "system", "cmd"));

Если необязательный аргумент тип равен "async", процесс запускается в фоновом режиме, и идентификатор процесса дочернего процесса возвращается немедленно. В противном случае дочерний процесс запускается, и Octave ожидает его завершения. Если аргумент тип опущен, он принимает значение "sync".

Функция system может возвращать два значения. Первое — это код завершения команды, а второе — любой вывод команды, который был записан в поток стандартного вывода. Например,

[status, output] = system ("echo foo & exit 2");

присвоит переменной вывод строку ‘foo’, а переменной статус целое число ‘2’.

Для команд, выполняемых асинхронно, статус — это идентификатор процесса командной оболочки, запущенной для выполнения команды.

Оболочка, используемая для выполнения команд, зависит от операционной системы и обычно составляет /bin/sh для систем Unix и cmd.exe для систем Windows.

См. также: unix, dos.

: unix ("команда")
: статус = unix ("команда")
: [статус, текст] = unix ("команда")
: […] = unix ("команда", "-echo")

Выполняет системную команду, если выполняется под операционной системой типа Unix, в противном случае ничего не делает.

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

Если вызывается без аргумента вывода или задан аргумент "-echo", тогда текст также передаётся в стандартный вывод.

См. также: dos, system, isunix, ismac, ispc.

: dos ("команда")
: статус = dos ("команда")
: [статус, текст] = dos ("команда")
: […] = dos ("команда", "-echo")

Выполняет системную команду, если выполняется под операционной системой типа Windows, в противном случае ничего не делает.

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

Если вызывается без аргумента вывода или задан аргумент "-echo", тогда текст также передаётся в стандартный вывод.

См. также: unix, system, isunix, ismac, ispc.

: open файл
: вывод = open (файл)

Открывает файл файл в Octave или во внешнем приложении, основанном на типе файла, определяемом расширением имени файла.

По умолчанию распознаваемые типы файлов:

.m

Открыть файл в редакторе. Значение вывод не возвращается.

.mat
octave-workspace

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

.ofig

Открыть график с помощью hgload. См. функцию hgload.

.fig, .ofig

Загрузить график

.exe

Выполнить программу (только для систем Windows). Значение вывод не возвращается.

Также могут обрабатываться пользовательские расширения файлов, если в пути загрузки найдена функция openxxx, где xxx — расширение. Функция должна принимать имя файла в качестве входного значения. Например, для загрузки файлов данных ".dat" в рабочую область базового уровня, как это делается по умолчанию для файлов ".mat", можно определить "opendat.m" со следующим содержимым:

function retval = opendat (fname)
  evalin ("base", sprintf ("load ('%s');", fname));
endfunction

Другие типы файлов открываются в соответствующем внешнем приложении.

: вывод = perl (скриптфайл)
: вывод = perl (скриптфайл, аргумент1, аргумент2, …)
: [вывод, статус] = perl (…)

Вызывает Perl-скрипт скриптфайл, возможно, с списком аргументов командной строки.

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

См. также: system, python.

: вывод = python (скриптфайл)
: вывод = python (скриптфайл, аргумент1, аргумент2, …)
: [вывод, статус] = python (…)

Вызывает Python-скрипт скриптфайл, возможно, со списком аргументов командной строки.

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

См. также: system, perl.

: указатель_файла = popen (команда, режим)

Запускает процесс и создаёт канал.

Имя команды для выполнения задаётся команда. Аргумент режим может быть

"r"

Канал будет подключен к стандартному выводу процесса и открыт для чтения.

"w"

Канал будет подключен к стандартному вводу процесса и открыт для записи.

Идентификатор файла, соответствующий потоку ввода или вывода процесса, возвращается в указатель_файла.

Например:

fid = popen ("ls -ltr / | tail -3", "r");
while (ischar (s = fgets (fid)))
  fputs (stdout, s);
endwhile

   -| drwxr-xr-x  33 root  root  3072 Feb 15 13:28 etc
   -| drwxr-xr-x   3 root  root  1024 Feb 15 13:28 lib
   -| drwxrwxrwt  15 root  root  2048 Feb 17 14:53 tmp

См. также: popen2.

: pclose (указатель_файла)

Закрывает идентификатор файла, открытый с помощью popen.

Функция fclose также может быть использована для той же цели.

См. также: fclose, popen.

: [вход, выход, идентификатор_процесса] = popen2 (команда, аргументы)

Запускает дочерний процесс с двусторонней связью.

Имя процесса задаётся команда, а аргументы — массив или ячеистый массив строк, содержащих параметры для команды.

Идентификаторы файлов для потоков ввода и вывода дочернего процесса возвращаются в вход и выход. Если выполнение команды прошло успешно, идентификатор_процесса содержит идентификатор процесса дочернего процесса. В противном случае идентификатор_процесса равен -1.

Например:

[in, out, pid] = popen2 ("sort", "-r");
fputs (in, "these\nare\nsome\nstrings\n");
fclose (in);
EAGAIN = errno ("EAGAIN");
done = false;
do
  s = fgets (out);
  if (ischar (s))
    fputs (stdout, s);
  elseif (errno () == EAGAIN)
    pause (0.1);
    fclear (out);
  else
    done = true;
  endif
until (done)
fclose (out);
waitpid (pid);

   -| these
   -| strings
   -| some
   -| are

Обратите внимание, что popen2, в отличие от popen, не «считает» дочерний процесс. Если вы не используете waitpid для проверки кода завершения дочернего процесса, он будет оставаться активным до завершения Octave.

См. также: popen, waitpid.

: значение = EXEC_PATH ()
: старое_значение = EXEC_PATH (новое_значение)
: EXEC_PATH (новое_значение, "локально")

Запрос или установка внутренней переменной, которая определяет список директорий, разделённых двоеточием, для добавления в переменную среды PATH оболочки при выполнении внешних программ.

Начальное значение берётся из переменной среды OCTAVE_EXEC_PATH, но это значение может быть переопределено аргументом командной строки --exec-path PATH.

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

См. также: IMAGE_PATH, OCTAVE_HOME, OCTAVE_EXEC_HOME.

В большинстве случаев следующие функции просто декодируют свои аргументы и выполняют соответствующие системные вызовы Unix. Для полного примера использования см. определение функции popen2.

: [pid, msg] = fork ()

Создаёт копию текущего процесса.

Функция fork может вернуть одно из следующих значений:

> 0

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

0

Вы находитесь в дочернем процессе. Вы можете вызвать exec для запуска другого процесса. Если это не удастся, вероятно, вам следует вызвать exit.

< 0

Вызов fork по какой-то причине завершился ошибкой. Вам необходимо принять меры предосторожности. Сообщение об ошибке, зависящее от системы, будет ожидаться в msg.

: [err, msg] = exec (file, args)

Заменяет текущий процесс новым процессом.

Вызов exec без предварительного вызова fork завершит текущий процесс Octave и заменит его программой с именем file. Например,

exec ("ls", "-l")

выполнит ls и вернёт вас к вашей оболочке.

В случае успеха exec не возвращает значение. Если exec возвращает значение, err будет отличен от нуля, а msg будет содержать сообщение об ошибке, зависящее от системы.

: [read_fd, write_fd, err, msg] = pipe ()

Создаёт канал и возвращает его концы чтения и записи соответственно в read_fd и write_fd.

В случае успеха, err равен 0, а msg — пустая строка. В противном случае err отличен от нуля, а msg содержит сообщение об ошибке, зависящее от системы.

См. также: mkfifo.

: [fid, msg] = dup2 (old, new)

Дублирует дескриптор файла.

В случае успеха, fid больше нуля и содержит новый идентификатор файла. В противном случае fid отрицательный, а msg содержит сообщение об ошибке, зависящее от системы.

См. также: fopen, fclose, fcntl.

: [pid, status, msg] = waitpid (pid, options)

Ожидает завершения процесса pid.

Аргумент pid может быть:

-1

Ожидать любой дочерний процесс.

0

Ожидать любой дочерний процесс, чей идентификатор группы процессов равен идентификатору группы процессов интерпретатора Octave.

> 0

Ожидать завершения дочернего процесса с идентификатором pid.

Аргумент options может быть побитовым ИЛИ одного или нескольких следующих констант:

0

Ожидать получения сигнала или завершения дочернего процесса (это значение по умолчанию, если аргумент options отсутствует).

WNOHANG

Не зависать, если статус не доступен немедленно.

WUNTRACED

Сообщить о статусе любых дочерних процессов, которые остановлены и чей статус ещё не был сообщён с момента их остановки.

WCONTINUE

Возвратиться, если остановленный дочерний процесс был возобновлён путём доставки SIGCONT. Это значение может не иметь смысла на всех системах.

Если возвращаемое значение pid больше 0, это идентификатор процесса завершившегося дочернего процесса. Если возникает ошибка, pid будет меньше нуля, а msg будет содержать сообщение об ошибке, зависящее от системы. Значение status содержит дополнительную информацию, зависящую от системы, о завершившемся дочернем процессе.

См. также: WCONTINUE, WCOREDUMP, WEXITSTATUS, WIFCONTINUED, WIFSIGNALED, WIFSTOPPED, WNOHANG, WSTOPSIG, WTERMSIG, WUNTRACED.

: WCONTINUE ()

Возвращает числовое значение макроса WCONTINUE.

WCONTINUE — это аргумент опции, который может быть передан waitpid, чтобы указать, что он должен также вернуть значение, если остановленный дочерний процесс был возобновлён путём доставки сигнала SIGCONT.

См. также: waitpid, WNOHANG, WUNTRACED.

: WCOREDUMP (status)

При заданном status из вызова waitpid, возвращает true, если дочерний процесс создал дамп ядра.

Эта функция должна использоваться только в случае, если WIFSIGNALED вернула true. Макрос, используемый для реализации этой функции, не указан в POSIX.1-2001 и недоступен на некоторых реализациях Unix (например, AIX, SunOS).

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: WEXITSTATUS (status)

При заданном status из вызова waitpid, возвращает код завершения дочернего процесса.

Эта функция должна использоваться только в случае, если WIFEXITED вернула true.

См. также: waitpid, WIFEXITED, WIFSIGNALED, WTERMSIG, WCOREDUMP, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: WIFCONTINUED (status)

При заданном status из вызова waitpid, возвращает true, если дочерний процесс был возобновлён путём доставки SIGCONT.

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WCOREDUMP, WIFSTOPPED, WSTOPSIG.

: WIFSIGNALED (status)

При заданном status из вызова waitpid, возвращает true, если дочерний процесс был завершён сигналом.

См. также: waitpid, WIFEXITED, WEXITSTATUS, WTERMSIG, WCOREDUMP, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: WIFSTOPPED (status)

При заданном status из вызова waitpid, возвращает true, если дочерний процесс был остановлен путём доставки сигнала.

Это возможно только в случае вызова с использованием WUNTRACED или когда дочерний процесс отслеживается (см. ptrace(2)).

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WCOREDUMP, WSTOPSIG, WIFCONTINUED.

: WIFEXITED (status)

При заданном status из вызова waitpid, возвращает true, если дочерний процесс завершился нормально.

См. также: waitpid, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WCOREDUMP, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: WNOHANG ()

Возвращает числовое значение макроса WNOHANG.

WNOHANG — это аргумент опции, который может быть передан waitpid, чтобы указать, что он должен возвращать свой статус немедленно вместо ожидания завершения процесса.

См. также: waitpid, WUNTRACED, WCONTINUE.

: WSTOPSIG (status)

При заданном status из вызова waitpid, возвращает номер сигнала, который привёл к остановке дочернего процесса.

Эта функция должна использоваться только в случае, если WIFSTOPPED вернула true.

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WCOREDUMP, WIFSTOPPED, WIFCONTINUED.

: WTERMSIG (status)

При заданном status из вызова waitpid, возвращает номер сигнала, который привёл к завершению дочернего процесса.

Эта функция должна использоваться только в случае, если WIFSIGNALED вернула true.

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WCOREDUMP, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: WUNTRACED ()

Возвращает числовое значение макроса WUNTRACED.

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

См. также: waitpid, WNOHANG, WCONTINUE.

: [err, msg] = fcntl (fid, request, arg)

Изменяет свойства открытого файла fid.

Следующие значения могут быть переданы в качестве request:

F_DUPFD

Возвращает дубликат дескриптора файла.

F_GETFD

Возвращает флаги дескриптора файла для fid.

F_SETFD

Устанавливает флаги дескриптора файла для fid.

F_GETFL

Возвращает флаги состояния файла для fid. Следующие коды могут быть возвращены (некоторые флаги могут быть неопределёнными на некоторых системах).

O_RDONLY

Открыто только для чтения.

O_WRONLY

Открыто только для записи.

O_RDWR

Открыто для чтения и записи.

O_APPEND

Добавление при каждой записи.

O_CREAT

Создать файл, если он не существует.

O_NONBLOCK

Режим без ожидания.

O_SYNC

Ожидание завершения записи.

O_ASYNC

Асинхронный ввод-вывод.

F_SETFL

Устанавливает флаги состояния файла для fid в значение, указанное arg. Единственными флагами, которые могут быть изменены, являются O_APPEND и O_NONBLOCK.

При успешном выполнении err равно 0, а msg — пустая строка. В противном случае err отлично от нуля, а msg содержит сообщение об ошибке, зависящее от системы.

См. также: fopen, dup2.

: [err, msg] = kill (pid, sig)

Отправляет сигнал sig процессу pid.

Если pid положительно, то сигнал sig отправляется процессу pid.

Если pid равно 0, то сигнал sig отправляется каждому процессу в группе процессов текущего процесса.

Если pid равно -1, то сигнал sig отправляется каждому процессу, кроме процесса 1.

Если pid меньше -1, то сигнал sig отправляется каждому процессу в группе процессов -pid.

Если sig равно 0, то сигнал не отправляется, но проверка ошибок всё равно выполняется.

Возвращает 0 при успехе, в противном случае возвращает -1.

: SIG ()

Возвращает структуру, содержащую имена сигналов Unix и их определённые значения.

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v6.4.0/Controlling-Subprocesses.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API