2016-08-08 9 views
0

Так что я пытаюсь сделать что-то плохое и грязное;)Блока команда тестирования убить

Я хочу назвать убийство (0, SIGKILL) в моих проверках UnitTest убить дочерние процессы, я начал с этим тестом.

ck_assert_int_eq(magic(13), 13); //<- success, but I cannot stop magic now 

если я

ck_assert_int_eq(kill(0, SIGKILL), 0); 

я получаю "тест: (после этого момента) Принимаемый сигнал 9 (Killed)"

Есть пути вокруг него? kill (0, SIGKILL) также выполняется в реальном коде, поэтому я думаю, что если попытаюсь вызвать функцию разрушения из своего теста, я собираюсь завершить ту же ошибку.

+0

Я не понимаю, что ожидаемое поведение. – a3f

+1

Не используйте SIGKILL, если вы можете избежать этого. Когда вы его используете, не используйте первый аргумент нуля и используйте 'fork()' для создания ребенка и чтобы ребенок совершил самоубийство. Если вы все еще должны тестировать 'kill (0, SIGKILL)', вы все равно используете 'fork()', но вы должны изолировать дочерний элемент от его исходной группы процессов ('setsid()' или, возможно, 'setpgrp()' или 'setpgid() '). –

+0

@ a3f Я хочу инициализировать магию, проверить код возврата из инициализации, а затем убить его. – Oreols

ответ

4

INT убийство (pid_t PID, внутр сиг)

Если PID равен 0, то сиг посылается каждому процессу в группе процессов вызывающего процесса .

Источник: man 2 kill

Вам нужно позвонить kill(child_pid, SIGKILL), потому что child_pid == 0 убивает родителя + ребенок.

pid_t fork (void);

После успешного завершения fork() возвращает 0 дочернему процессу, а должен вернуть идентификатор процесса дочернего процесса в родительский процесс. Оба процесса продолжают выполняться из функции fork(). В противном случае -1 должен быть возвращен родительскому процессу, ни один дочерний процесс не должен быть создан, и errno должны быть установлены для указания ошибки.

Источник: man 3 fork

+0

Вам просто нужно добавить немного объяснений - например, 'kill (0, SIGKILL)' - плохая идея, и 'fork()' plus 'kill (getpid(), SIGKILL)' в этом случае может быть тем, что необходимо. –