来自 c++ 的 Android kill子进程失败

Android killing sub process from c++ fails

本文关键字:子进程 失败 kill Android c++ 来自      更新时间:2023-10-16

我的java代码对c++函数(function0)进行jni调用;然后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

安全终止子进程的正确方法是什么?

当我从子进程内部调用信号处理程序时,进程被杀死而没有任何问题,但在父进程发送信号时失败;

通过反复试验,我认为通过在 c++ 代码中调用 fork 创建的子进程可以通过调用 android.os.Process.killProcess(pid)(其中 pid 是子进程 id)在 java 代码中杀死,但不能由父 c++ 代码杀死;