【问题标题】:Android killing sub process from c++ failsAndroid从c ++杀死子进程失败
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 2012-01-25
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2014-02-13
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多