У меня есть команда, которую я звоню из кода:
execvp('generate', ...)
которая является исполняемой программой, с которой мой код связывается через stdin, stdout и stderr. Это отлично работает, ни одной проблемы.
Я хочу изменить это, чтобы я мог установить ограничения на ресурсы при generate
. Итак, я попытался позвонить:
ulimit -t 1 && generate
Но я получаю сломанную трубу, когда пытаюсь с ней общаться.
Поэтому я поместил строку выше в сценарий оболочки generate_wrapper
:
#!/bin/bash
ulimit -t 1 && generate
И я получаю сломанную трубу, когда пытаюсь с ней общаться.
Но
$ echo "foo" | generate_wrapper
$ echo "foo" | generate
оба дают мне правильный, идентичный вывод. Я подумал, что это может быть &&, поэтому я попробовал только голую команду:
#!/bin/bash
generate
Но он все еще работает с CL, и я все еще получаю прерванный канал, когда пытаюсь связаться с ним из кода.
Я попытался явно маршрутизировать FDS, и получил:
#!/bin/bash
generate >&1 2>&2 <&0
Но нет, я все еще получаю сломанный канал, когда пытаюсь связаться с ним из кода.
Поэтому, очевидно, я понятия не имею, что я делаю. Вы можете помочь? Как мне написать оболочку, чтобы я мог ulimit
порожденный подпроцесс (rlimit
недоступен для pids на моем языке хоста) и по-прежнему общаться с ним?