单元测试kill命令

问题描述:

所以我试图做坏事,肮脏;)单元测试kill命令

我想打电话给杀(0,SIGKILL)在我的支票单元测试杀我与这个测试启动子进程。

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,请不要使用SIGKILL。当你使用它时,不要使用零的第一个参数,并且使用'fork()'创建一个孩子并让孩子自杀。如果你仍然必须测试'kill(0,SIGKILL)',你仍然使用'fork()',但是你必须将它与原始进程组('setsid()'或者'setpgrp()'或'setpgid ()')。 –

+0

@ a3f我想初始化魔术,从初始化检查返回代码,然后杀死它。 – Oreols

INT杀灭(将为pid_t PID,诠释SIG)

如果pid等于0,则签名被发送到每一个过程的调用 进程的进程组中使用。

来源:man 2 kill

你需要调用kill(child_pid, SIGKILL),因为child_pid == 0将杀死父母+孩子。

pid_t fork(void);

成功完成后,fork()应将0返回给子进程,并且 应将子进程的进程ID返回给父进程。这两个 进程都应该继续从fork()函数中执行。否则,-1 应返回到父进程,不应创建子进程,应设置 和errno来指示错误。

来源:man 3 fork

+0

你只需要添加一些解释 - 比如'kill(0,SIGKILL)'是一个坏主意,''fork()'加上'kill(getpid(),SIGKILL)''可能是需要的。 –