mbox все еще показывает почтовые сообщения после того, как они были удалены

Похоже, что нет способа регистрации этой информации, и если рассмотреть это более подробно, то это будет трудно спроектировать правильно (я сначала думал, что это будет трудно реализовать, но ilkkachu исправил это).

Я думал, что проблема реализации заключается в регистрации информации в нужном месте. Когда оболочка запускает дочерний процесс, она форкает, а затем выполняет дочерний процесс (если только она не может заменить себя дочерним процессом, в этом случае она не форкает). При форке процесс дублируется; одна из копий получает код возврата 0 от вызова fork(), что указывает на то, что она дочерняя, а другая получает идентификатор дочернего процесса, что указывает на то, что она родительская. Дочерний процесс наследует файловые дескрипторы родительского, поэтому он может регистрировать свой собственный pid перед настройкой для exec().

Проблема проектирования заключается в выборе того, что регистрировать. Если мы будем регистрировать все процессы, запускаемые оболочкой, то в итоге получим множество лишних журналов, например, для процессов, участвующих в создании подсказки! Даже для "настоящих" команд нам нужно решить, что регистрировать для конвейеров и других составных команд... А затем для согласованности нам нужно придумать, что регистрировать для встроенных команд или для обстоятельств, когда оболочка заменяет себя дочерней (хотя я не думаю, что это может произойти в интерактивной оболочке, если только вы вручную exec).

Если вы хотите изучить это подробнее, посмотрите addproc() и printjobs() в jobs.c, и zexecve() в exec.c.

1
18.02.2016, 20:26
0 ответов

Теги

Похожие вопросы