----- #include #include main(){ struct rlimit a; getrlimit(RLIMIT_NPROC, &a); printf("soft: %d hard: %d\nuid: %d euid: %d\n", a.rlim_cur, a.rlim_max, getuid(), geteuid()); usleep(1000000); printf("(euid=%d) setuid(%d)=",geteuid(), getuid() ); printf("%d", setuid(getuid())); printf(" (euid=%d)\n", geteuid()); } ---- Running this as a root suid, these are the results: soft: -1 hard: -1 uid: 1000 euid: 0 (euid=0) setuid(1000)=0 (euid=1000) after a ulimit -u 100 soft: 100 hard: 100 uid: 1000 euid: 0 (euid=0) setuid(1000)=0 (euid=1000)