ここから本文です

投票受付終了まであと5日 ベストアンサーにふさわしい回答に投票してください

投票すると知恵コイン5枚プラスされます。

android studioでforkができないのですが、理由が分かりません。 どうすればでき...

rit********さん

2018/10/1309:44:41

android studioでforkができないのですが、理由が分かりません。
どうすればできるのでしょうか???

以下のプログラムでforkの所で子プロセスができません。

//kkk start
pid_t pid;
int rc;
pid = fork();
if (0 == pid){
// ここは子プロセス
__android_log_print(ANDROID_LOG_ERROR, "ko", "ko");
execl("./kawa_jikkou", "./kawa_jikkou");
// exec 成功ならここには来ない
__android_log_print(ANDROID_LOG_ERROR, "jni", "exec err");
}

// ここは親プロセス
for (int i = 0; i < 2; i++){
__android_log_print(ANDROID_LOG_ERROR, "jni", "jni");
sleep(1);
}

//kkk end
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
16
回答数:
1
お礼:
500枚

違反報告

回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

rp0********さん

2018/10/1311:52:59

どうやって子プロセスが生成されていないと判断しているのでしょうか?
fork()の戻り値が「-1」なら生成失敗ですが
fork()の戻り値をログ出力している箇所がないように見えます
させているならerrnoはどうなっていますか?

logcat上に「ko」と出力されていないから子プロセスができていない
と判断でしょうか?
logcatにはフィルタリング機能がありますが、
ちゃんと別プロセスのログも出力できる設定になっていますか?

本件と関係ないですが、
親プロセスの動作について
sleep(1);をループさせているのは子プロセスの実行完了待ちの為ですか?
この場合、waitpid();で子プロセスの終了を待つべきでは。。
子プロセスの動作について
失敗したらexel()より下のコードが全て動いてしまうから
_exit(0);を書いておくべき


どういう用途で使うのかによりますが、
デーモン的ことさせようとしてるなら辞めた方がよいみたいですよ
http://d.hatena.ne.jp/embedded/20110605/p1

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる