Как написать в сопроцесс из дочернего процесса родительского процесса, который открыл сопроцесс - PullRequest
0 голосов
/ 17 октября 2019

Я использую сопроцесс внутри моего основного родительского процесса, чтобы порождать команды для оболочки, которая иначе не может быть решена (оболочка, которую я открываю в сопроцессе, не поддерживается мной и выполняет команды "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 сообщает об этой же ошибке, если переместить этокусок кода в функцию и вызовите ее с & без (), так что нет подоболочки. Это тоже понятно;он все равно будет порождать дочерний процесс, независимо от того, будет ли он запущен в подоболочке или нет.

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

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

...