Процесс убийства в C ++, созданный системой && Ограничение времени выполнения - PullRequest
0 голосов
/ 02 февраля 2012

Можно ли убить процесс, созданный Системой?Насколько я знаю, System использует функцию fork () для создания нового процесса.Я хочу отследить время выполнения вызываемого процесса (разветвленный перед вызовом системы) и уничтожить его, если он превысит лимит времени выполнения.Будет ли также убит дочерний элемент, созданный system (), если я убью дочерний элемент, созданный моим основным процессом?

Это не настоящий код, но может дать представление о том, о чем я говорю.

int pid = fork();
if(pid == 0)
{
  system("./veryLongProgram");
}
else
{
  // calculate time elapsed and kill on long execution time
}

Я также предпочел бы, если бы я мог использовать ограничение по времени ЦП, НО я не хочу, чтобы мой дочерний процесс спал.Если это так - он может оставаться в таком состоянии очень долго.Можно ли прервать любой сон, паузу или что-то намеренно вызванное вызываемой программой?Это было бы идеально.Или, может быть, я могу проверить, не спит ли мой процесс (в этом случае я также должен убедиться, что он сделал это специально и не был приостановлен из-за какой-то печати или чего-то еще)?

1 Ответ

2 голосов
/ 02 февраля 2012
  1. Используйте exec вместо системы
  2. Организовать, чтобы родитель получал сигнал SIGARLM.При получении используйте системный вызов kill, чтобы убить ребенка.Используйте функцию alarm для установки будильника.
  3. Заставьте родителя использовать системный вызов wait для ожидания естественного отмирания ребенка или получения системного вызова.

    Вы можете сделать его немного менее резким, но сначала отправив сначала сигнал TERM и предоставив ребенку возможность привести себя в порядок перед отправкой сигнала KILL.

...