rhealey@ub.d.umn.edu (Rob Healey) (09/12/89)
How does one set/modify the limits in the u.u_limit array for the user under 3.5x? See /usr/include/sys/vlimit.h for details. IS there any way you can set these so your core files, CPU time, etc is actually limited? I didn't see the SIGNALS involved in the limits defined anywhere. Just VERY curious if this is just another dead end brought to you by Convergent and the mortal remains of CTIX within the UNIX PC. -Rob Healey rhealey@ub.d.umn.edu
lenny@icus.islp.ny.us (Lenny Tropiano) (09/13/89)
In article <2725@umn-d-ub.D.UMN.EDU> rhealey@ub.d.umn.edu (Rob Healey) writes: |> |> How does one set/modify the limits in the u.u_limit array for |> the user under 3.5x? See /usr/include/sys/vlimit.h for details. |> IS there any way you can set these so your core files, CPU time, |> etc is actually limited? I didn't see the SIGNALS involved in |> the limits defined anywhere. Just VERY curious if this is just |> another dead end brought to you by Convergent and the mortal |> remains of CTIX within the UNIX PC. |> Well you tweeked my curiosity, so I had to try it for myself. I started by researching those files, <sys/vlimit.h>, <sys/user.h>, etc.. Then I wrote a program to get the address of my user structure, then lseek in /dev/kmem for that address and read in struct user. I dumped out the values for u->u_limit[0..6] to see what they were... u->u_limit[LIM_NORAISE] = 0 u->u_limit[LIM_CPU] = INFINITY (2147483647) u->u_limit[LIM_FSIZE] = INFINITY u->u_limit[LIM_DATA] = 2621440 u->u_limit[LIM_STACK] = 524288 u->u_limit[LIM_CORE] = INFINITY u->u_limit[LIM_MAXRSS] = INFINITY For what I can see the stuff like CPU time limits, core file size limits, etc, are BSD left-overs from the Convergent port. Yes, as Rob pointed out there is no signals to handle the limit overflows. On a BSD system there would be a signal like SIGXCPU that would be for exceeding the CPU time limit. The LIM_FSIZE correlates to the ulimit(2) system call, and the ulimit built-in for /bin/sh and /bin/ksh. I tested my program by doing a: ulimit 1000 and then re-running it and I saw that: u->u_limit[LIM_FSIZE] = 1000 So what I did was modify the program to write the user structure back out to kmem with some values changed. I changed the LIM_CPU to 10 (10 cpu secs) and LIM_CORE to 2 (two blocks). I then wrote a simple program that just looped forever and ever. It accrued minutes of cpu time, and didn't stop. I also created a program that malloc'd as much memory as it could (sbrk(2)) and then I did a "kill -4 pid", which created a BIG core file! Definately not two blocks ... Now what's interesting, and I haven't really tested anything with this yet, is the values that aren't INFINITY; LIM_DATA, LIM_STACK. LIM_DATA is at a two megabyte limit (which sound correct), and LIM_STACK is at a .5MB limit. Since it's late already tonight, and I'm dead tired, I'll play with this more tomorrow. But I have a feeling that the u_limit[] array in the user block isn't used for anything but the file size limit. For more information on BSD only stuff, look in the manual under ksh(1), and the built-in ulimit. I did, BTW try doing a ulimit -c ##, and it said bad options(s) -- as suspected! Hope that helps... It would be nice if those BSDisms were there! -Lenny -- Lenny Tropiano ICUS Software Systems [w] +1 (516) 589-7930 lenny@icus.islp.ny.us Telex; 154232428 ICUS [h] +1 (516) 968-8576 {ames,pacbell,decuac,hombre,talcott,sbcs}!icus!lenny attmail!icus!lenny ICUS Software Systems -- PO Box 1; Islip Terrace, NY 11752
mark@umbc3.UMBC.EDU (Mark Sienkiewicz) (09/16/89)
In article <2725@umn-d-ub.D.UMN.EDU> rhealey@ub.d.umn.edu (Rob Healey) writes: > > How does one set/modify the limits in the u.u_limit array for > the user under 3.5x? See /usr/include/sys/vlimit.h for details. In fact, there is no stock way to set the interesting limits. If you write some new kernel code, you can change the values, but this has no effect on anything. There are 3 (?) limits that you can set using the SYSV ulimit() call documented in your manual. Apparently CT had to break the OS in several places to make it SVID compliant. :( -- Mark S. uunet!umbc3!nerwin!zilla!mark nerwin!zilla!mark@umbc3.umbc.edu
comeau@utoday.UUCP (Greg Comeau) (09/20/89)
In article <2725@umn-d-ub.D.UMN.EDU> rhealey@ub.d.umn.edu (Rob Healey) writes: > How does one set/modify the limits in the u.u_limit array for > the user under 3.5x? See /usr/include/sys/vlimit.h for details. I check about that many moons ago and came across a dead end. Seems that these fields are basically bogus in this implemntation.