Mercurial > hg > nginx
comparison src/os/unix/ngx_process_cycle.c @ 1404:df2592d32e49
set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
worker_rlimit_sigpending without super-user privileges testing
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 15 Aug 2007 20:53:30 +0000 |
parents | 03f1133f24e8 |
children | e498f4cb1663 |
comparison
equal
deleted
inserted
replaced
1403:99fb4fdbd53a | 1404:df2592d32e49 |
---|---|
790 exit(2); | 790 exit(2); |
791 } | 791 } |
792 | 792 |
793 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); | 793 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); |
794 | 794 |
795 if (priority && ccf->priority != 0) { | |
796 if (setpriority(PRIO_PROCESS, 0, ccf->priority) == -1) { | |
797 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | |
798 "setpriority(%d) failed", ccf->priority); | |
799 } | |
800 } | |
801 | |
802 if (ccf->rlimit_nofile != NGX_CONF_UNSET) { | |
803 rlmt.rlim_cur = (rlim_t) ccf->rlimit_nofile; | |
804 rlmt.rlim_max = (rlim_t) ccf->rlimit_nofile; | |
805 | |
806 if (setrlimit(RLIMIT_NOFILE, &rlmt) == -1) { | |
807 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | |
808 "setrlimit(RLIMIT_NOFILE, %i) failed", | |
809 ccf->rlimit_nofile); | |
810 } | |
811 } | |
812 | |
813 if (ccf->rlimit_core != NGX_CONF_UNSET_SIZE) { | |
814 rlmt.rlim_cur = (rlim_t) ccf->rlimit_core; | |
815 rlmt.rlim_max = (rlim_t) ccf->rlimit_core; | |
816 | |
817 if (setrlimit(RLIMIT_CORE, &rlmt) == -1) { | |
818 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | |
819 "setrlimit(RLIMIT_CORE, %i) failed", | |
820 ccf->rlimit_core); | |
821 } | |
822 } | |
823 | |
824 #ifdef RLIMIT_SIGPENDING | |
825 if (ccf->rlimit_sigpending != NGX_CONF_UNSET) { | |
826 rlmt.rlim_cur = (rlim_t) ccf->rlimit_sigpending; | |
827 rlmt.rlim_max = (rlim_t) ccf->rlimit_sigpending; | |
828 | |
829 if (setrlimit(RLIMIT_SIGPENDING, &rlmt) == -1) { | |
830 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | |
831 "setrlimit(RLIMIT_SIGPENDING, %i) failed", | |
832 ccf->rlimit_sigpending); | |
833 } | |
834 } | |
835 #endif | |
836 | |
795 if (geteuid() == 0) { | 837 if (geteuid() == 0) { |
796 if (priority && ccf->priority != 0) { | |
797 if (setpriority(PRIO_PROCESS, 0, ccf->priority) == -1) { | |
798 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
799 "setpriority(%d) failed", ccf->priority); | |
800 } | |
801 } | |
802 | |
803 if (ccf->rlimit_nofile != NGX_CONF_UNSET) { | |
804 rlmt.rlim_cur = (rlim_t) ccf->rlimit_nofile; | |
805 rlmt.rlim_max = (rlim_t) ccf->rlimit_nofile; | |
806 | |
807 if (setrlimit(RLIMIT_NOFILE, &rlmt) == -1) { | |
808 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
809 "setrlimit(RLIMIT_NOFILE, %i) failed", | |
810 ccf->rlimit_nofile); | |
811 } | |
812 } | |
813 | |
814 if (ccf->rlimit_core != NGX_CONF_UNSET_SIZE) { | |
815 rlmt.rlim_cur = (rlim_t) ccf->rlimit_core; | |
816 rlmt.rlim_max = (rlim_t) ccf->rlimit_core; | |
817 | |
818 if (setrlimit(RLIMIT_CORE, &rlmt) == -1) { | |
819 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
820 "setrlimit(RLIMIT_CORE, %i) failed", | |
821 ccf->rlimit_core); | |
822 } | |
823 } | |
824 | |
825 #ifdef RLIMIT_SIGPENDING | |
826 if (ccf->rlimit_sigpending != NGX_CONF_UNSET) { | |
827 rlmt.rlim_cur = (rlim_t) ccf->rlimit_sigpending; | |
828 rlmt.rlim_max = (rlim_t) ccf->rlimit_sigpending; | |
829 | |
830 if (setrlimit(RLIMIT_SIGPENDING, &rlmt) == -1) { | |
831 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
832 "setrlimit(RLIMIT_SIGPENDING, %i) failed", | |
833 ccf->rlimit_sigpending); | |
834 } | |
835 } | |
836 #endif | |
837 | |
838 if (setgid(ccf->group) == -1) { | 838 if (setgid(ccf->group) == -1) { |
839 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | 839 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, |
840 "setgid(%d) failed", ccf->group); | 840 "setgid(%d) failed", ccf->group); |
841 /* fatal */ | 841 /* fatal */ |
842 exit(2); | 842 exit(2); |