327
327
* decoded value of time in seconds in the unsigned long integer.
330
static int gettime(pres, ret)
331
gettime(resource *pres, unsigned long *ret)
335
334
if (pres->rs_value.at_type != ATR_TYPE_LONG)
547
545
error(char *string, int value)
552
549
assert(string != NULL);
553
550
assert(*string != '\0');
554
assert(value > PBSE_); /* minimum PBS error number */
555
assert(value <= PBSE_NOSYNCMSTR); /* maximum PBS error number */
556
assert(pbs_err_to_txt[i].err_no != 0);
560
if (pbs_err_to_txt[i].err_no == value)
563
while (pbs_err_to_txt[++i].err_no != 0);
565
assert(pbs_err_to_txt[i].err_txt != NULL);
567
message = *pbs_err_to_txt[i].err_txt;
552
message = pbse_to_txt(value);
569
554
assert(message != NULL);
571
555
assert(*message != '\0');
573
557
(void)fprintf(stderr, msg_momsetlim, string, message);
598
582
* existing limits. Cannot alter those set by setrlimit (kernel)
599
583
* because we are the wrong process.
601
int mom_set_limits(pjob, set_mode)
603
int set_mode; /* SET_LIMIT_SET or SET_LIMIT_ALTER */
588
int set_mode /* SET_LIMIT_SET or SET_LIMIT_ALTER */
605
591
char *id = "mom_set_limits";
633
619
if (strcmp(pname, "cput") == 0) /* cpu time - check */
635
retval = gettime(pres, &value);
621
if (igncput == FALSE)
623
retval = gettime(pres, &value);
637
if (retval != PBSE_NONE)
638
return (error(pname, retval));
625
if (retval != PBSE_NONE)
626
return (error(pname, retval));
640
629
else if (strcmp(pname, "pcput") == 0)
642
/* process cpu time - set */
643
if (set_mode == SET_LIMIT_SET)
631
if (igncput == FALSE)
645
retval = gettime(pres, &value);
647
if (retval != PBSE_NONE)
648
return (error(pname, retval));
650
assert(value <= INT_MAX);
652
reslim.rlim_cur = reslim.rlim_max =
653
(unsigned long)((double)value / cputfactor);
655
if (setrlimit(RLIMIT_CPU, &reslim) < 0)
656
return (error("RLIMIT_CPU", PBSE_SYSTEM));
633
/* process cpu time - set */
634
if (set_mode == SET_LIMIT_SET)
636
retval = gettime(pres, &value);
638
if (retval != PBSE_NONE)
639
return (error(pname, retval));
641
assert(value <= INT_MAX);
643
reslim.rlim_cur = reslim.rlim_max =
644
(unsigned long)((double)value / cputfactor);
646
if (setrlimit(RLIMIT_CPU, &reslim) < 0)
647
return (error("RLIMIT_CPU", PBSE_SYSTEM));
659
651
else if (strcmp(pname, "file") == 0) /* set */
677
669
else if (strcmp(pname, "vmem") == 0) /* check */
679
retval = getsize(pres, &value);
671
if (ignvmem == FALSE)
673
retval = getsize(pres, &value);
681
if (retval != PBSE_NONE)
682
return (error(pname, retval));
675
if (retval != PBSE_NONE)
676
return (error(pname, retval));
684
679
else if (strcmp(pname, "pvmem") == 0) /* set */
686
if (set_mode == SET_LIMIT_SET)
681
if (ignvmem == FALSE)
688
retval = getsize(pres, &value);
690
if (retval != PBSE_NONE)
691
return (error(pname, retval));
694
return (error(pname, PBSE_BADATVAL));
696
reslim.rlim_cur = reslim.rlim_max = value;
698
if ((ignvmem == 0) && (setrlimit(RLIMIT_DATA, &reslim) < 0))
699
return (error("RLIMIT_DATA", PBSE_SYSTEM));
701
if ((ignvmem == 0) && (setrlimit(RLIMIT_STACK, &reslim) < 0))
702
return (error("RLIMIT_STACK", PBSE_SYSTEM));
683
if (set_mode == SET_LIMIT_SET)
685
retval = getsize(pres, &value);
687
if (retval != PBSE_NONE)
688
return (error(pname, retval));
691
return (error(pname, PBSE_BADATVAL));
693
reslim.rlim_cur = reslim.rlim_max = value;
695
if ((ignvmem == 0) && (setrlimit(RLIMIT_DATA, &reslim) < 0))
696
return (error("RLIMIT_DATA", PBSE_SYSTEM));
698
if ((ignvmem == 0) && (setrlimit(RLIMIT_STACK, &reslim) < 0))
699
return (error("RLIMIT_STACK", PBSE_SYSTEM));
705
703
else if (strcmp(pname, "mem") == 0) /* ignore */
708
706
else if (strcmp(pname, "pmem") == 0) /* set */
710
if (set_mode == SET_LIMIT_SET)
712
retval = getsize(pres, &value);
714
if (retval != PBSE_NONE)
715
return (error(pname, retval));
717
reslim.rlim_cur = reslim.rlim_max = value;
719
if (setrlimit(RLIMIT_RSS, &reslim) < 0)
720
return (error("RLIMIT_RSS", PBSE_SYSTEM));
710
if (set_mode == SET_LIMIT_SET)
712
retval = getsize(pres, &value);
714
if (retval != PBSE_NONE)
715
return (error(pname, retval));
717
reslim.rlim_cur = reslim.rlim_max = value;
719
if (setrlimit(RLIMIT_RSS, &reslim) < 0)
720
return (error("RLIMIT_RSS", PBSE_SYSTEM));
723
724
else if (strcmp(pname, "walltime") == 0) /* Check */
967
968
assert(pname != NULL);
968
969
assert(*pname != '\0');
970
if (strcmp(pname, "cput") == 0)
971
if ((igncput == FALSE) && (strcmp(pname, "cput") == 0))
972
973
retval = gettime(pres, &value);
1143
1142
* Kill a job task.
1144
1143
* Call with the job and a signal number.
1146
int kill_task(ptask, sig, pg)
1146
kill_task(task *ptask, int sig, int pg)
1151
1148
char *id = "kill_task";
1224
1220
* If abort is true, kill it too.
1227
int mach_checkpoint(ptask, file, abort)
1224
mach_checkpoint(task *ptask, char *file, int abort)