Автор вопроса определил проблему; но решение xyr - это ошибка, а описание механики xyr неверно.
Команда mail
не выполняет двойную вилку. Она вилкует только один раз, и процесс sendmail shim является ее непосредственным дочерним процессом, который ни к чему не перенаправляется. Он просто решает, ждать ли waitpid()
этого ребенка или нет, прежде чем выйти.
То же самое верно и для самого sendmail shim. Он не выполняет двойную вилку. На некоторых MTS он вообще не вилкуется. На других он форкает только один раз и выбирает, ждать или нет, в зависимости от некоторой конфигурируемой опции "режим доставки".
Правильный способ обойти эту проблему состоит из двух пунктов:
mailx
документированную и стандартизованную опцию sendwait
. Она специально решает проблемы асинхронного enqueueing, заставляя mailx
ждать завершения дочернего процесса sendmail shim. (К сожалению, хотя эта опция существует по крайней мере с 1986 года и документирована для mailx
в SVID, в bsd-mailx ее нет. А вот в heirloom-mailx она есть.)qmail-inject
в qmail-queue
без каких-либо форков. postdrop
, после чего завершает работу. -odf
. на дистрибутивах на основе dpkg -,
Список пакетов со статусом по дате,
grep install /var/log/dpkg.log