Как закрыть процесс stdout и stderr без `disown` или gdb? - PullRequest
1 голос
/ 26 августа 2011

Я портирую некоторые bash-скрипты для запуска на busybox.Они используют disown, который не поддерживается в ash, перед тем как убить некоторые процессы, чтобы сообщения этого процесса не появлялись в stdout / stderr.Я хотел бы сохранить эту функциональность.Означает ли это, что закрытие stdout / sterr или перенаправление на /dev/null после его запуска.

Как это сделать?

Ответы [ 2 ]

1 голос
/ 26 августа 2011

exec [n]>&- закроет FD [n].

0 голосов
/ 26 августа 2011

Вы не можете изменять перенаправления для файловых дескрипторов, если процесс запущен извне этого процесса. Это означает, что вам придется выполнять перенаправление во время создания процесса оболочкой. Перенаправление файлов или закрытие файлов, как показал Игнасио, остается за вами.

И я не уверен, почему вы думаете, что встроенная в bash команда disown влияет на дескрипторы файлов. Вот что говорится в руководстве по bash:

   disown [-ar] [-h] [jobspec ...]
        Without options, each jobspec  is  removed  from  the  table  of
        active  jobs.   If jobspec is not present, and neither -a nor -r
        is supplied, the shell's notion of the current job is used.   If
        the -h option is given, each jobspec is not removed from the ta-
        ble, but is marked so that SIGHUP is not sent to the job if  the
        shell  receives a SIGHUP.  If no jobspec is present, and neither
        the -a nor the -r option is supplied, the current job  is  used.
        If no jobspec is supplied, the -a option means to remove or mark
        all jobs; the -r option without  a  jobspec  argument  restricts
        operation  to running jobs.  The return value is 0 unless a job-
        spec does not specify a valid job.

Но, возможно, мое понимание того, чего вы пытаетесь достичь, является неполным.

...