* Copyright (c) 1982, 1986 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
* @(#)kern_resource.c 7.9 (Berkeley) %G%
* Resource controls and accounting.
getpriority(curp
, uap
, retval
)
register int low
= PRIO_MAX
+ 1;
register struct pgrp
*pg
;
else if ((pg
= pgfind(uap
->who
)) == NULL
)
for (p
= pg
->pg_mem
; p
!= NULL
; p
= p
->p_pgrpnxt
) {
for (p
= allproc
; p
!= NULL
; p
= p
->p_nxt
) {
if (p
->p_uid
== uap
->who
&&
setpriority(curp
, uap
, retval
)
int found
= 0, error
= 0;
error
= donice(curp
, p
, uap
->prio
);
register struct pgrp
*pg
;
else if ((pg
= pgfind(uap
->who
)) == NULL
)
for (p
= pg
->pg_mem
; p
!= NULL
; p
= p
->p_pgrpnxt
) {
error
= donice(curp
, p
, uap
->prio
);
for (p
= allproc
; p
!= NULL
; p
= p
->p_nxt
)
if (p
->p_uid
== uap
->who
) {
error
= donice(curp
, p
, uap
->prio
);
register struct proc
*curp
, *chgp
;
if (curp
->p_uid
&& curp
->p_ruid
&&
curp
->p_uid
!= chgp
->p_uid
&& curp
->p_ruid
!= chgp
->p_uid
)
if (n
< chgp
->p_nice
&& suser(u
.u_cred
, &u
.u_acflag
))
setrlimit(p
, uap
, retval
)
register struct rlimit
*alimp
;
if (uap
->which
>= RLIM_NLIMITS
)
alimp
= &u
.u_rlimit
[uap
->which
];
copyin((caddr_t
)uap
->lim
, (caddr_t
)&alim
, sizeof (struct rlimit
)))
if (alim
.rlim_cur
> alimp
->rlim_max
|| alim
.rlim_max
> alimp
->rlim_max
)
if (error
= suser(u
.u_cred
, &u
.u_acflag
))
if (alim
.rlim_cur
> maxdmap
)
if (alim
.rlim_max
> maxdmap
)
if (alim
.rlim_cur
> maxdmap
)
if (alim
.rlim_max
> maxdmap
)
if (uap
->which
== RLIMIT_RSS
)
p
->p_maxrss
= alim
.rlim_cur
/NBPG
;
getrlimit(p
, uap
, retval
)
if (uap
->which
>= RLIM_NLIMITS
)
return (copyout((caddr_t
)&u
.u_rlimit
[uap
->which
], (caddr_t
)uap
->rlp
,
sizeof (struct rlimit
)));
getrusage(p
, uap
, retval
)
register struct rusage
*rup
;
rup
->ru_stime
= p
->p_stime
;
rup
->ru_utime
= p
->p_utime
;
return (copyout((caddr_t
)rup
, (caddr_t
)uap
->rusage
,
sizeof (struct rusage
)));
register struct rusage
*ru
, *ru2
;
timevaladd(&ru
->ru_utime
, &ru2
->ru_utime
);
timevaladd(&ru
->ru_stime
, &ru2
->ru_stime
);
if (ru
->ru_maxrss
< ru2
->ru_maxrss
)
ru
->ru_maxrss
= ru2
->ru_maxrss
;
ip
= &ru
->ru_first
; ip2
= &ru2
->ru_first
;
for (i
= &ru
->ru_last
- &ru
->ru_first
; i
> 0; i
--)