Для этого нужно использовать именную трубу.
Сначала создайте его в папке:
mkfifo foo.pipe
Затем используйте эту команду:
tar cvf foo.pipe ./foo >foo.out 2>foo.err & cat foo.pipe >foo.tar
Примечание: часть cat
- теперь может быть также gzip
или любой другой, которая может считываться с трубы:
tar cvf foo.pipe ./foo >foo.out 2>foo.err & gzip -c foo.pipe >foo.tar
Пояснение:
Выход записывается в именную трубу (foo. pipe
), из которой считывается другой процесс (cat
, gzip
, netcat
). Таким образом, вы не теряете каналы stdout/stderr для получения информации.
Не знаю, возможно ли вообще убить вызов sync(). Убийство процесса, который это сделал, вероятно, недостаточно.
$ echo $DYLD_LIBRARY_PATH
$
Если отменить sync() возможно, то я бы ожидал, что ущерб будет меньше, чем без вызова, по крайней мере, при использовании файловой системы с журналом.
Может быть полезно сделать этот вызов как можно раньше (т.е. до того, как будут убиты задачи). Это может позволить использовать более длительный таймаут.
.