-2

そのため、プログラムをフォークして、同じプログラムを再度実行します。

このプログラムは、開始時に getenv("PATH"); を介して $PATH 環境変数を解析します。しかし、何らかの理由で、子プロセスの env $PATH が空です。

char *path = getenv("PATH");
if(fork() == 0)
{
    execve(path, argv, NULL); 
}
else //parent
{
    wait(0);
}
4

2 に答える 2

3

それはあなたが使用する方法ではありませんexecve()。最初の引数は実行可能ファイルへのパスであり、PATH環境変数ではありません。3番目の引数は、子プロセスの環境を指定する場所です。ここでNULLを渡すと、子は環境変数(PATHを含む)を継承しません。

于 2013-02-05T23:49:53.610 に答える
0

「理由」は、の最後のパラメーターにNULLを渡すことですexecve。これは、新しいプロセスの環境を表すname=value文字列のNULLで終了する配列である必要があります。NULLを渡すことは、子が空の環境を取得することを意味します。

また、拡張されたPATH変数を実行しようとしていますが、これは最初はほとんど意味がありません。

于 2013-02-05T23:50:53.003 に答える