問題タブ [execv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
shell - パスを使用せずにシステムコールを実行する
指定されたコマンドのフル パスを知らなくても、どの exec システム コール ファミリー メンバーを使用できるか。たとえば、
コマンドラインから与えられた入力は、このように execv(arg[0],args) を適切に使用できます
しかし、「ls /sbin」「wc -w」「cat」入力があると、execv を使用できません。
registry - prog 名と argv の trapframe レジスタ値
私はos161で作業しており、char *program nameとchar **argvのレジスタ値を見つけて、traframe構造からexecvシステムコールに渡したいと思っています
trapframe->tf_a1 は argv 値を格納しますが、trapframe のすべてのデータ型は u_int32 です
どうすればそれらを見つけることができますか?
ありがとう
c - waitpid - 子が正常に終了したにもかかわらず 0 を返す WIFEXITED
waitpid
私は、子プロセスを生成し、子プロセスの終了を待つように呼び出すプログラムを書いています。コードは以下のとおりです。
waitpid
の状態のマンページWIFEXITED
:
これは、成功時に整数 != 0 を返す必要があることを意味すると解釈しますが、これは私のプログラムの実行では発生していません。WIFEXITED(status) == 0
ただし、コマンド ラインから同じプログラムを実行すると$? == 0
、gdb から開始すると、次のようになります。
プログラムは正常に動作しますが、トリガーされた警告を除いて、ここで何か他のことが起こっていると思わせます。
編集:
以下のコメントで提案されているように、子が segfault を介して終了したかどうかを確認し、実際にWIFSIGNALED(status)
は 1 をWTERMSIG(status)
返し、11を返しますSIGSEGV
。
私が理解していないのは、gdbまたはシェルを介した同じ呼び出しが成功するのに、execvを介した呼び出しがsegfaultで失敗するのはなぜですか?
EDIT2:
私のアプリケーションの動作は、子プロセスの動作、特に宣言された関数で子プロセスが書き込むファイルに大きく依存します__attribute__ ((destructor))
。waitpid
呼び出しが返された後、このファイルは存在し、正しく生成されます。つまり、別のデストラクタのどこか、または私の制御外のどこかでセグメンテーション違反が発生します。
execv - Linux カーネル 3.2 からの execv() の実装を見つける
execv() の実装 (そのパスを含む) を見つける方法と、Linux カーネル 3.2 で定義されている場所は?
その実装を見つけて、カスタム システム コールにリダイレクトするリダイレクト コードをこのファイルに書き込もうとしています。
python - 単一のpythonスクリプトで複数の実行可能ファイルをexecvしますか?
私が知る限り、execv は現在のプロセスを追い越し、呼び出された実行可能ファイルが終了すると、プログラムは終了します。同じスクリプト内で execv を複数回呼び出したいのですが、このため、実行できません。
現在のプロセス内で実行され (つまり、同じ stdout に出力され)、プログラムを終了しない execv の代替手段はありますか? もしそうなら、それは何ですか?