Spec-Zone.ru › Octave 5

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

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

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

system ("строка")
system ("строка", return_output)
system ("строка", return_output, type)
[статус, вывод] = system (…)

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

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

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

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

или

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

Функция 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 (файл)

Открыть файл файл в 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.

fid = popen (команда, режим)

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

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

"r"

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

"w"

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

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

Например:

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 (fid)

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

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

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

[вход, выход, pid] = popen2 (команда, аргументы)

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

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

Идентификаторы файлов для потоков ввода и вывода дочернего процесса возвращаются в вход и выход. Если выполнение команды прошло успешно, pid содержит идентификатор процесса дочернего процесса. В противном случае pid равно -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.

val = EXEC_PATH ()
old_val = EXEC_PATH (new_val)
EXEC_PATH (new_val, "local")

Запрос или установка внутренней переменной, которая определяет список директорий, разделённых двоеточием, для добавления в переменную среды 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 — это аргумент options, который может быть передан 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 — это аргумент options, который может быть передан 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 — это аргумент options, который может быть передан waitpid, чтобы указать, что он также должен вернуть значение, если дочерний процесс был остановлен, но не отслеживается с помощью системного вызова ptrace.

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

END_OF_DOCUMENT_MARKER
[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/v5.2.0/Controlling-Subprocesses.html

Spec-Zone.ru

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