Просто улучшите исходный код вашего приложения (возможно Apache2 в вашем случае, который является открытым исходным кодом )для вызова setrlimit (2)после успешного вызова fork (2 ), но перед вызовом execve (2).
Поскольку вы действительно хотите, чтобы системный вызов setrlimit
был выполнен после ,fork
(то, что вы затем установили, остается до следующего вызова setrlimit
, возможно, с помощью ulimit
встроенной функции твоя оболочка ).
Потратьте некоторое время, чтобы лучше понять, как системные вызовы (2)работают (в Linux, в частностиfork
и execve
и setrlimit
), и как и когда их следует использовать. Я рекомендую прочитать хорошую книгу по системному программированию Linux, такую как ALP .
Следовательно, то, чего вы хотите достичь, в общем случае нереалистично, если только вы не согласитесь немного изменить каждую используемую вами программу. Философия Unix , вдохновившая разработчиков fork
, execve
, setrlimit
, запрещает это.
Конечно, вы могли бы, в принципе, делать безумныеLD_PRELOAD
трюки , чтобы перегрузить поведениеfork
(вызова setrlimit
после того, как он возвращает 0 )илиexecve
(вызова setrlimit
системного вызова перед ним. )для динамически подключаемыхисполняемых файлов(или эквивалентно исправьте собственный вариант libc.so
), но это неразумно. См. также файл (1)или ldd (1)для обнаружения таких динамически связанных исполняемых файлов.
Однако вы можете использовать встроенную оболочку ulimit
, чтобы установить ограничения для Apache2 и всех его потомков. И вы можете погрузиться в документацию Apache2, у него есть множество настроек, касающихся его дочерних процессов.
KDE использует udisk для подключения съемных носителей.
man udisks
рассказывает:
UDISKS_FILESYSTEM_SHARED : If set to 1, the filesystem on the device will be mounted in a shared directory (e.g. /media/VolumeName) instead of a private directory (e.g./run/media/$USER/VolumeName) when the Filesystem.Mount() method is handled.
Я думаю, это именно то, что вы ищете.
Кстати, я не знаю о какой-либо возможности изменить VolumeName в $USER