2010-10-10 6 views
4

Я хочу создать дочерний процесс, который вызывает другую программу (с C++ в Unix). Но я хочу ограничить дочерний процесс не вызывать system(), fopen() и т. Д. (Если это так, оно будет прекращено).Предотвращение дочернего процесса из системных вызовов

Как это сделать?

+0

Я хочу создать простой и персональный грейдер для проблем программирования, так что если решение вызовет system(), оно сообщит «Незаконный системный вызов» или что-то в этом роде. – fushar

+1

Если я не ошибаюсь, ejugde является открытым исходным кодом. Может быть, вы можете посмотреть, как это делается? –

ответ

2

this может вам помочь. Кажется, что есть способ обработки разных вещей, которые дочерний процесс делает через ptrace. HTH

0

Tricky. Если это Linux или BSD, вы можете экспериментировать с setrlimit(RLIMIT_NPROC, &lim). Это не приведет к завершению работы дочернего элемента, если он пытается создать процесс, но это приведет к сбою системного вызова fork. Нет подсказки, если есть более переносимый ответ.

+0

Итак, он все еще может «exec» ... –

+0

@Peter - Хм, да, это тоже будет дыра в безопасности. Ответ Армена, вероятно, лучше (при условии, что он работает на ОС, который будет использоваться). – aschepler

1

Если предположить, что дочерний процесс использует библиотеку C, чтобы сделать системные вызовы, это динамический исполняемый файл, и ваша система использует ELF, вы можете установить LD_PRELOAD в библиотеку, которая перехватывает функции, которые вы заинтересованы.

В противном случае , вы можете сделать инструмент Valgrind.