单元测试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)也在实际的代码中完成,所以我认为如果我尝试从我的测试中调用销毁函数,那么我将以相同的错误结束。
答
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)''可能是需要的。 –
我不明白,预期的行为是什么。 – a3f
如果可以避免使用SIGKILL,请不要使用SIGKILL。当你使用它时,不要使用零的第一个参数,并且使用'fork()'创建一个孩子并让孩子自杀。如果你仍然必须测试'kill(0,SIGKILL)',你仍然使用'fork()',但是你必须将它与原始进程组('setsid()'或者'setpgrp()'或'setpgid ()')。 –
@ a3f我想初始化魔术,从初始化检查返回代码,然后杀死它。 – Oreols