Сбой Android-подпроцесса из с ++ - PullRequest
0 голосов
/ 24 января 2019

Мой код 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, адрес ошибки 0x91cb3110 в tid 3844

Как правильно безопасно завершить подпроцесс?

процесс завершается без каких-либо проблем, когда я вызываю обработчик сигнала из подпроцесса, но происходит сбой, когда родитель отправляет сигнал;

1 Ответ

0 голосов
/ 24 января 2019

Методом проб и ошибок я решил, что подпроцессы, созданные вызовом fork в коде c ++, могут быть уничтожены в коде java путем вызова android.os.Process.killProcess (pid) (где pid - это идентификатор подпроцесса), ноне родительским кодом c ++;

...