C : spawn*

spawn*を作っているのだけれど、子プロセスでexec*が失敗したときにそのエラーコードを親プロセスに返すにはどうすればいいのだ?

      • -

Pythonのosモジュールを見たらexit(127)していた。親側で、ステータスをif WIFSTOPPED(sts):などとしている。
参考 : http://www.linux.or.jp/JM/html/LDP_man-pages/man2/wait.2.html

      • -

なるほど。呼出前にaccess()で調べておくのか。
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/access.2.html
それ以外のエラーはどうする?

      • -

子プロセスを待つなら、waitpid()で明示的にプロセスを指定して待つほうがよいかも。

      • -

_spawnv()の返値が-1なら、子プロセスが起動していないということを示すと書いてあるけれど、子プロセス側で-1を返したら、返値は-1になるよ。
errnoをちゃんと確認しないとだめということか。
http://msdn2.microsoft.com/ja-jp/library/7zt1y878(VS.80).aspx

#include <stdlib.h>
#include <process.h>

int main(int argc, char **argv) {
	int status;
	if (argc > 1) { exit(-1);}
	char const *args[3];
	args[0] = "test";
	args[1] = "a";
	args[2] = 0;
	status = spawnv(_P_WAIT, args[0], args);
	printf("%d",status);
	if (status == -1) {
		perror();
	}
}
      • -

unix系ならプロセスのリターンコードは16bitだけれど、Windowsなら32bitまで使えるみたいだね。
やっぱり、この辺は環境依存が大きいな。