来自 c++ 的 Android kill子进程失败
Android killing sub process from c++ fails
我的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++ 代码杀死;
相关文章:
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 父进程和子进程之间的 POSIX 信号量
- 检测到由于操作系统内存不足而导致子进程终止
- 使用system()创建独立的子进程
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 在 Bash 脚本中处理来自子进程的信号
- Qt C++ - 如何成功将数据传递给子进程?
- C++ 窗口本地系统模拟在子进程中失败
- 将类型化数组写入子进程 stdin 无法正常工作
- 将 nodejs 脚本作为子进程执行(而不是从其他脚本执行)
- 使用信号检测子进程何时终止的最佳方法是什么?
- 来自 c++ 的 Android kill子进程失败
- pthread_join失败是否会导致子进程成为僵尸