2016-08-08 3 views
0

그래서 나는 나쁜 더러운 일을하려합니다.단위 테스트 kill 명령

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

내가 할 경우 내가 얻을

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

:

는 주위 가지 방법이 있습니다 "테스트 (이 시점 이후) 수신 신호 9 (사망)"? kill (0, SIGKILL) 또한 실제 코드에서 수행되었으므로 테스트에서 파괴 함수를 호출하려고하면 같은 오류가 발생합니다.

+0

나는 예상되는 행동이 무엇인지 이해하지 않습니다. – a3f

+1

피해야 할 경우 SIGKILL을 사용하지 마십시오. 그것을 사용할 때는 첫 번째 인수를 0으로 사용하지 말고'fork()'를 사용하여 자식을 만들고 자식이 자살하도록하십시오. 여전히'kill (0, SIGKILL)'을 테스트해야한다면, 여전히'fork()'를 사용하지만 원래 프로세스 그룹 ('setsid()'또는'setpgrp()'또는'setpgid()'). –

+0

@ a3f 마술을 초기화하고 초기화 코드에서 리턴 코드를 확인한 다음 죽이려고합니다. – Oreols

답변

4

INT 연속

PID가 0 일 경우 (된 pid_t의 pid는, 시그마 INT), 다음 SIG는 호출 프로세스의 프로세스 그룹의 모든 프로세스로 전송됩니다.

출처 : man 2 kill

당신은 child_pid == 0 부모 + 자녀를 죽일 것이기 때문에, kill(child_pid, SIGKILL)를 호출해야합니다.

pid_t fork (void);

성공적으로 완료되면 fork()는 자식 프로세스에 0을 반환하고 은 자식 프로세스의 프로세스 ID를 부모 프로세스로 반환합니다. 프로세스는 fork() 함수에서 계속 실행됩니다. 그렇지 않다면, -1 은 부모 프로세스로 리턴되어야하고 자식 프로세스는 생성되지 않고 이고 오류를 나타내도록 errno가 설정되어야한다.

출처 : man 3 fork

+0

'kill (0, SIGKILL)'과 같은 설명을 추가하기 만하면됩니다. 아이에게'fork()'와'kill (getpid(), SIGKILL)'이 필요할 수도 있습니다. –