diff options
Diffstat (limited to 'docs/nofork_noexec.txt')
-rw-r--r-- | docs/nofork_noexec.txt | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/docs/nofork_noexec.txt b/docs/nofork_noexec.txt index b45a4be..9d210a1 100644 --- a/docs/nofork_noexec.txt +++ b/docs/nofork_noexec.txt @@ -10,13 +10,8 @@ of reimplemented Unix commands, and we can do the same trick for speeding up busybox shells, and more. NOEXEC and NOFORK applets are exactly those applets which are eligible for these tricks. -Applet will be subject to NOFORK/NOEXEC tricks if it is marked as such -in applets.h. FEATURE_PREFER_APPLETS is a config option which -globally enables usage of NOFORK/NOEXEC tricks. -If it is enabled, FEATURE_SH_STANDALONE can be enabled too, -and then shells will use NOFORK/NOEXEC tricks for ordinary commands. -NB: shell builtins use these tricks regardless of FEATURE_SH_STANDALONE -or FEATURE_PREFER_APPLETS. +Applet will be subject to NOFORK/NOEXEC tricks only if it is marked +as such in applets.src.h or in their inline "//applet:" directives. In C, if you want to call a program and wait for it, use spawn_and_wait(argv), BB_EXECVP(prog,argv) or BB_EXECLP(prog,argv0,...). @@ -24,6 +19,31 @@ They check whether program name is an applet name and optionally do NOFORK/NOEXEC thing depending on configuration. + Relevant CONFIG options + +FEATURE_PREFER_APPLETS + Globally enables NOFORK/NOEXEC tricks for such programs as xargs + and find: + BB_EXECVP(cmd, argv) will try to exec /proc/self/exe + if command's name matches some applet name; + spawn_and_wait(argv) will do NOFORK/NOEXEC tricks + +//TODO: the above two things probably should have separate options? + +FEATURE_SH_STANDALONE + shells will try to exec /proc/self/exe if command's name matches + some applet name; shells will do NOEXEC trick on NOEXEC applets + +//TODO: split (same as for PREFER_APPLETS) + +FEATURE_SH_NOFORK + shells will do NOFORK trick on NOFORK applets + +NB: shell builtins use these tricks regardless of FEATURE_SH_STANDALONE, +FEATURE_PREFER_APPLETS or FEATURE_SH_NOFORK. In effect, builtins +are "always NOFORK". + + NOEXEC NOEXEC applet should work correctly if another applet forks and then @@ -121,22 +141,3 @@ option_mask32 getting trashed. It's the same trusty spawn_and_wait(argv). If FEATURE_PREFER_APPLETS=y, it does NOEXEC trick. It resets xfunc_error_retval = 1 and logmode = LOGMODE_STDIO in the child. - - - Relevant CONFIG options - -FEATURE_PREFER_APPLETS - BB_EXECVP(cmd, argv) will try to exec /proc/self/exe - if command's name matches some applet name; - spawn_and_wait(argv) will do NOFORK/NOEXEC tricks - -//TODO: the above two things probably should have separate options? - -FEATURE_SH_STANDALONE - shells will try to exec /proc/self/exe if command's name matches - some applet name; shells will do NOEXEC trick on NOEXEC applets - -//TODO: split (same as for PREFER_APPLETS) - -FEATURE_SH_NOFORK - shells will do NOFORK trick on NOFORK applets |