LINUX.ORG.RU

Invocation


0

0

Есть бинарник. Хочется запустить его, максимально урезав права, + ограничить ему cpu time и доступную память. После выполнения хочется знать его cpu time и максимальное количиство памяти, если он завершил выполнение, или какие ограничения он попытался нарушить.

Как лучше всего сотворить такую штуку под Linux?


Не понятно, что имеется в виду под урезанием прав. А так, ulimit и time -v (который /usr/bin, а не башевский).

mv ★★★★★
()

Соглашусь с предыдущим оратором - не совсем ясно, что подразумевать под урезанием прав. В любом случае, как вариант - strace и изучать вывод.

runtime ★★★★
()
Ответ на: комментарий от mv

Под урезанием прав имеется ввиду, что надо запретить работу с сетью, писать во всякие файлы, использовать сторонние либы, системные вызовы и т. д. - разрешать только ввод-вывод в жестко указанные файлы (или даже stdin/stdout) и все.

/usr/bin/time -f «%M» у меня почему-то всегда возвращает 0 на моих примерах, а мне как раз сильно нужен max RSS

winger
() автор топика
Ответ на: комментарий от winger

Под урезанием прав имеется ввиду, что надо запретить работу с сетью, писать во всякие файлы, использовать сторонние либы, системные вызовы и т. д. - разрешать только ввод-вывод в жестко указанные файлы (или даже stdin/stdout) и все.

Осваивайте написание кастомных политик selinux, там это всё можно.

/usr/bin/time -f «%M» у меня почему-то всегда возвращает 0 на моих примерах, а мне как раз сильно нужен max RSS

$ /usr/bin/time -v ls /
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  pub  root  sbin  selinux  srv  sys  tmp  usr  var
        Command being timed: "ls /"
        User time (seconds): 0.00
        System time (seconds): 0.00
        Percent of CPU this job got: 50%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 251
        Voluntary context switches: 1
        Involuntary context switches: 0
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0
mv ★★★★★
()
Ответ на: комментарий от mv

% cat main.cpp
#include <cstdio>

const int n = 100000000;

int ar[n];

int main() {
int sum = 0;
for (int it = 0; it < 10; ++it) {
for (int i = 1; i < n; ++i) {
ar[i] = ar[i - 1] + 1;
sum += ar[i];
}
}
printf(«%d\n», sum);
return 0;
}

% g++ -O2 main.cpp -o main
% /usr/bin/time -v ./main
284662528
Command being timed: "./main"
User time (seconds): 3.18
System time (seconds): 0.40
Percent of CPU this job got: 97%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.66
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 0
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 97889
Voluntary context switches: 1
Involuntary context switches: 465
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

Maximum resident set size (kbytes): 0


Не очень похоже на правду

winger
() автор топика

Очередная система проведения олимпиад?

anonymous
()
Ответ на: комментарий от mv

В /proc/<pid>/status есть нужная инфа только для активных процессов. У зомби он ее уже забывает(. Можно конечно постоянно мониторить этот файл пока процесс не умрет, но имхо это костыль

Очередная система проведения олимпиад?

Да, она. Захотелось свой велосипед написать. Из существующих под линух я только ejudge знаю, сейчас буду разбираться как там делают. BTW, ограничение прав они через свой патч к ядру реализуют, через SELinux должно намного лучше получиться

winger
() автор топика
Ответ на: комментарий от winger

Ну так может и поддержку SELinux туда законтрибутить?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.