2011-08-25 2 views
1

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

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

+0

Знаете ли вы о 'nohup cmd &', это поможет? Удачи. – shellter

+0

Спасибо за комментарий. Хм, это не помогло. – Derrick

+0

Извините, но перечитывая свой пост, я все еще не понимаю, чего вы пытаетесь достичь. Можете ли вы отредактировать свою публикацию, чтобы включить в нее псевейкод, ожидаемые входы (при необходимости) и ожидаемые выходы. Выполняется ли этот набор скриптов как демон или из crontab? Удачи. – shellter

ответ

0

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

И я не уверен, почему вы считаете, что встроенная встраиваемая версия bash влияет на дескрипторы файлов. Вот что говорит руководство по 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. 

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

+0

Это недоразумение исходило из сценариев, которые я переношу. http://devresources.linuxfoundation.org/dev/hotplug/ У них есть функция, которая убивает pid, но прежде чем делать это, отключите. У него есть побочный эффект: не распечатывать «процесс: убит» на терминал. Зола Busybox не отрекается, поэтому я искал нечто подобное. Оказывается, перенаправление вывода kill выполняет задание. – Derrick

1

exec [n]>&- будет закрыт FD [n].

Смежные вопросы