296
296
* decoded value of time in milliseconds in the unsigned long integer.
299
static int gettime(pres, ret)
300
gettime(resource *pres, unsigned long *ret)
304
303
if (pres->rs_value.at_type != ATR_TYPE_LONG)
517
515
error(char *string, int value)
522
519
assert(string != NULL);
523
520
assert(*string != '\0');
524
assert(value > PBSE_); /* minimum PBS error number */
525
assert(value <= PBSE_NOSYNCMSTR); /* maximum PBS error number */
526
assert(pbs_err_to_txt[i].err_no != 0);
530
if (pbs_err_to_txt[i].err_no == value)
533
while (pbs_err_to_txt[++i].err_no != 0);
535
assert(pbs_err_to_txt[i].err_txt != NULL);
537
message = *pbs_err_to_txt[i].err_txt;
522
message = pbse_to_txt(value);
539
524
assert(message != NULL);
541
525
assert(*message != '\0');
543
527
(void)fprintf(stderr, msg_momsetlim, string, message);
568
552
* existing limits. Cannot alter those set by setrlimit (kernel)
569
553
* because we are the wrong process.
571
int mom_set_limits(pjob, set_mode)
573
int set_mode; /* SET_LIMIT_SET or SET_LIMIT_ALTER */
558
int set_mode /* SET_LIMIT_SET or SET_LIMIT_ALTER */
575
561
char *id = "mom_set_limits";
604
590
if (strcmp(pname, "cput") == 0)
606
/* cpu time - check, if less than pcput use it */
607
retval = gettime(pres, &value);
592
if (igncput == FALSE)
594
/* cpu time - check, if less than pcput use it */
595
retval = gettime(pres, &value);
609
if (retval != PBSE_NONE)
610
return (error(pname, retval));
597
if (retval != PBSE_NONE)
598
return (error(pname, retval));
612
601
else if (strcmp(pname, "pcput") == 0)
614
/* process cpu time - set */
615
retval = gettime(pres, &value);
617
if (retval != PBSE_NONE)
618
return (error(pname, retval));
620
reslim.rlim_cur = reslim.rlim_max =
621
(unsigned long)((double)value / cputfactor);
623
if (setrlimit(RLIMIT_CPU, &reslim) < 0)
624
return (error("RLIMIT_CPU", PBSE_SYSTEM));
603
if (igncput == FALSE)
605
/* process cpu time - set */
606
retval = gettime(pres, &value);
608
if (retval != PBSE_NONE)
609
return (error(pname, retval));
611
reslim.rlim_cur = reslim.rlim_max =
612
(unsigned long)((double)value / cputfactor);
614
if (setrlimit(RLIMIT_CPU, &reslim) < 0)
615
return (error("RLIMIT_CPU", PBSE_SYSTEM));
626
618
else if (strcmp(pname, "file") == 0) /* set */
644
636
else if (strcmp(pname, "vmem") == 0) /* check */
646
retval = getsize(pres, &value);
648
if (retval != PBSE_NONE)
649
return (error(pname, retval));
651
if ((mem_limit == 0) || (value < mem_limit))
638
if (ignvmem == FALSE)
640
retval = getsize(pres, &value);
642
if (retval != PBSE_NONE)
643
return (error(pname, retval));
645
if ((mem_limit == 0) || (value < mem_limit))
654
649
else if (strcmp(pname, "pvmem") == 0) /* set */
656
retval = getsize(pres, &value);
658
if (retval != PBSE_NONE)
659
return (error(pname, retval));
662
return (error(pname, PBSE_BADATVAL));
664
if ((mem_limit == 0) || (value < mem_limit))
651
if (ignvmem == FALSE)
653
retval = getsize(pres, &value);
655
if (retval != PBSE_NONE)
656
return (error(pname, retval));
659
return (error(pname, PBSE_BADATVAL));
661
if ((mem_limit == 0) || (value < mem_limit))
667
665
else if (strcmp(pname, "mem") == 0) /* ignore */
670
668
else if (strcmp(pname, "pmem") == 0) /* set */
672
if (set_mode == SET_LIMIT_SET)
674
retval = getsize(pres, &value);
676
if (retval != PBSE_NONE)
677
return (error(pname, retval));
679
reslim.rlim_cur = reslim.rlim_max = value;
681
if (setrlimit(RLIMIT_RSS, &reslim) < 0)
682
return (error("RLIMIT_RSS", PBSE_SYSTEM));
672
if (set_mode == SET_LIMIT_SET)
674
retval = getsize(pres, &value);
676
if (retval != PBSE_NONE)
677
return (error(pname, retval));
679
reslim.rlim_cur = reslim.rlim_max = value;
681
if (setrlimit(RLIMIT_RSS, &reslim) < 0)
682
return (error("RLIMIT_RSS", PBSE_SYSTEM));
685
686
else if (strcmp(pname, "walltime") == 0) /* Check */
1175
1171
* If abort is true, kill it too.
1178
int mach_checkpoint(ptask, file, abort)
1175
mach_checkpoint(task *ptask, char *file, int abort)