Spec-Zone.ru › Octave 9

Далее: Идентификаторы процессов, групп и пользователей, Предыдущее: Утилиты сетевого взаимодействия, Вверх: Системные утилиты [Оглавление][Индекс]

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

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

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

: system ("string") ¶
: system ("string", return_output) ¶
: system ("string", return_output, type) ¶
: [status, output] = system (…) ¶

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

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

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

или

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

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

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

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

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

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

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

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

: unix ("command") ¶
: status = unix ("command") ¶
: [status, text] = unix ("command") ¶
: […] = unix ("command", "-echo") ¶

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

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

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

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

: dos ("command") ¶
: status = dos ("command") ¶
: [status, text] = dos ("command") ¶
: […] = dos ("command", "-echo") ¶

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

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

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

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

: open file ¶
: output = open (file) ¶

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

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

.m

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

.mat
octave-workspace

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

.ofig

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

.fig, .ofig

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

.exe

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

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

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

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

: output = perl (scriptfile) ¶
: output = perl (scriptfile, argument1, argument2, …) ¶
: [output, status] = perl (…) ¶

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

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

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

: output = python (scriptfile) ¶
: output = python (scriptfile, argument1, argument2, …) ¶
: [output, status] = python (…) ¶

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

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

Примечание по программированию: в системах UNIX скрипт будет выполнен python3 , а в Windows — python. Вы можете переопределить эти значения по умолчанию, установив переменную среды PYTHON, например, внутри Octave с помощью setenv PYTHON /usr/local/bin/python3.

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

: fid = popen (command, mode) ¶

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

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

"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.

: status = pclose (fid) ¶

Закрыть идентификатор файла fid, который был открыт popen.

При успешном выполнении fclose возвращает 0, в противном случае — -1.

Примечание по программированию: для той же цели также может быть использована функция fclose.

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

: [in, out, pid] = popen2 (command, args) ¶

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

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

Идентификаторы файлов для потоков ввода и вывода дочернего процесса возвращаются в in и out. При успешном выполнении команды 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) ¶
: old_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.

: v = WCONTINUE () ¶

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

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

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

: tf = WCOREDUMP (status) ¶

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

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

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

: tf = WEXITSTATUS (status) ¶

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

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

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

: tf = WIFCONTINUED (status) ¶

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

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

: tf = WIFSIGNALED (status) ¶

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

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

: tf = WIFSTOPPED (status) ¶

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

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

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

: tf = WIFEXITED (status) ¶

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

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

: v = WNOHANG () ¶

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

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

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

: tf = WSTOPSIG (status) ¶

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

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

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

: tf = WTERMSIG (status) ¶

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

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

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

: v = WUNTRACED () ¶

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

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

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

: fcntl (fid, request, arg) ¶
: [status, 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.

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

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

: kill (pid, sig) ¶
: [status, msg] = kill (pid, sig) ¶

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

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

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

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

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

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

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

: S = SIG () ¶

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

Далее: Информация о процессах, группах и пользователях, Предыдущий: Сетевые утилиты, Вверх: Системные утилиты [Содержание][Индекс]

© 1996–2023 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/v9.2.0/Controlling-Subprocesses.html

Spec-Zone.ru

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