【发布时间】:2019-01-24 12:03:29
【问题描述】:
我的 java 代码让 jni 调用一个 c++ 函数 (function0);然后 c++ 代码开始一个进程:
int main_pid,new_process_pid=-1;
void function0(){
main_pid=getpid();
new_process_pid=fork();
if(main_pid!=getpid()){
main_process();//some process with its own threads
}
}
void kill_sub_process(){
if(new_process_pid!=-1){
kill(new_process_pid,SIGKILL);
}
}
当我尝试通过从我的活动 onStop() 调用 kill_sub_process 函数来终止子进程时,logcat 中出现以下错误并且应用程序崩溃:
致命信号 4 (SIGILL),代码 1,tid 3844 中的故障地址 0x91cb3110
安全终止子进程的正确方法是什么?
当我从子进程内部调用信号处理程序时,进程被终止而没有任何问题,但当父进程发送信号时失败;
【问题讨论】:
-
使用 "less agressive" 信号,并在子进程中有一个信号处理程序,让它更优雅和有序地终止。
-
@πάντα ῥεῖ 如果你的意思是像 SIGQUIT 一样,子进程实际上有一个信号处理程序,它可以非常优雅地终止进程,我已经尝试过了;同样的事情发生;
标签: android c++ process kill-process multiprocess