Как писать в сопроцесс из дочернего процесса родительского процесса, открывшего сопроцесс

Я использую сопроцесс внутри своего основного родительского процесса для создания команд в оболочке, которая в противном случае не может быть решена (оболочка, которую я открываю в сопроцессе, не поддерживается мной и выполняет команды "newgrp" и "exec", которые мешают мне отправка команд в эту оболочку просто из моего сценария... Итак, мне нужен сопроцесс, чтобы иметь возможность выполнять команды в этой оболочке из сценария). До сих пор я использовал один поток, родительский процесс, для передачи команд сопроцессу, но теперь мне также нужны команды порождения из нескольких дочерних процессов из-за этапа оптимизации. В документе bash говорится, что дескрипторы файлов не наследуются дочерними процессами, и это действительно так, когда я открыл подоболочку, я получил следующее сообщение об ошибке от bash:

[...]/automatic_integration/clif_ai_common.sh: строка 396: ${!clifAi_sendCmdToCoproc_varName}: неверный дескриптор файла

Код, вызывающий появление этого сообщения, выглядит следующим образом:

if [[ ${PARAM_NO_MOVING_VERIF_TB_TAGS} != true ]]; then
    (
        clifAi_log ${CLIFAI_LOGLEVEL_INFO} "" "clifAi_sanityRegression_callbackRunning" "Populating moving VERIF and TB tags in the background..."

        clifAi_popVerifTags "${clifAi_sanityRegression_callbackRunning_coproc}" "${clifAi_sanityRegression_callbackRunning_wslogfile}" "${PARAM_OPTLEVEL}" "${CONST_EXCLUDE_FILTER}" "${CONST_DIR_TO_OPT}" ${clifAi_sanityRegression_callbackRunning_excludeList}
        clifAi_popTbTags "${clifAi_sanityRegression_callbackRunning_coproc}" "${clifAi_sanityRegression_callbackRunning_wslogfile}"

        rm -rf ${VAR_VERIFTBTAG_SEMAPHORE_FILE}
    ) &
fi

Bash сообщает о той же ошибке, если я перемещаю этот фрагмент кода в функцию и вызываю его с помощью & без (), поэтому подоболочки нет. Это тоже понятно; он по-прежнему будет порождать дочерний процесс, независимо от того, запущен он в подоболочке или нет.

Мой вопрос: как я могу писать в сопроцесс, принадлежащий родительскому процессу, из дочерних процессов? Какая лучшая практика?

Заранее большое спасибо, Геза Балаш

0 ответов

Другие вопросы по тегам