Вы не показывали вывод, который выдает ваша программа, но я думаю, что это может быть тот случай, когда ps ax
и ls -l /
не выдают вывод, а /bin/tar
-. Причина в том, что первые две команды выводят на stdout
, но не stderr
, тогда как последняя выдаст на stderr
(поскольку вы не даете действительные параметры tar
), но не на stdout
.
Вот разница при запуске команд в оболочке:
[axe@gromp tmp]$ ps ax > ps-std.txt 2> ps-err.txt
[axe@gromp tmp]$ ls -l / > ls-std.txt 2> ls-err.txt
[axe@gromp tmp]$ /bin/tar > tar-std.txt 2> tar-err.txt
[axe@gromp tmp]$ ls -lrt
total 18
-rw-r--r-- 1 axe users 0 Mar 5 19:40 ps-err.txt
-rw-r--r-- 1 axe users 7191 Mar 5 19:40 ps-std.txt
-rw-r--r-- 1 axe users 0 Mar 5 19:40 ls-err.txt
-rw-r--r-- 1 axe users 937 Mar 5 19:40 ls-std.txt
-rw-r--r-- 1 axe users 0 Mar 5 19:41 tar-std.txt
-rw-r--r-- 1 axe users 142 Mar 5 19:41 tar-err.txt
[axe@gromp tmp]$
Используя >
для перенаправления стандартного вывода и 2>
для перенаправления вывода ошибки в разные файлы, вы можете видеть, что tar
создает сообщения на stderr
, а два других на stdout
(размеры файлов для остальные файлы равны нулю, выходных данных не было).
Может быть, это так? Что произойдет, если вы запустите, e. г. echo "Foo"
вместо tar
в качестве третьего процесса?