問題タブ [execve]
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.
linux - バイナリ実行時の「そのようなファイルまたはディレクトリはありません」エラー
Ubuntu9.10x86_64にバイナリLinuxアプリケーションをインストールしていました。アプリには、はるかに古いカーネル用にコンパイルされた古いバージョンのgzip(1.2.4)が付属しています。
このプログラムを実行できませんでした。私が試した場合、これは起こりました:
lddも同様にこのバイナリに不満を持っていました:
私は興味があります:この問題の最も可能性の高い原因は何ですか?破損したファイル?または、はるかに古い{kernel、libc、...}用に構築されているためにバイナリの非互換性がありますか?
nosの提案によると、次の出力がありstrace ./gzip
ます。
これがの出力ですreadelf -a ./gzip
:
c++ - Mac OS X launchd デーモンからの execve
launchd デーモンからexecveを使用することは可能ですか? デーモンにしたい私のプロセスは、fork() に続いて execve を使用していくつかの子プロセスを起動しますが、launchd デーモンを作成するためのドキュメントには、「fork に続いて exec を呼び出す」ことは問題があると記載されています。これは、デーモンから子プロセスを作成できないということですか?
c - このプログラムは何をしているのですか?
それらは何ですか?それはプログラムにどのようmemcpy
に影響していますか?memset
execve
proc
bss2 の更新コード
アップデート
問題は、環境変数がどこにあるかに帰結するようです。
execve - 成功すると返されないため、execve の後の行は何ですか?
何のreturn 0;
ために?
python - 適切なPythonバージョンでPythonプログラムを起動する方法は?
一連のPythonプログラムが与えられた場合:
共有ネットワークディレクトリに保存され、混合環境(Solarisおよびさまざまな種類のLinux)で実行され、ユーザーの$ PATHに含まれておらず、同じ場所にインストールされていない可能性のある特定のPythonバージョンが必要です。さまざまな種類のマシン。
プログラムはどのPythonインタープリターを使用するかをどのように指定できますか?
私が検討した代替案:
現在のタイプのマシンに適切なPythonインタープリターを起動するPythonラッパーを参照する各Pythonプログラムのシバン。ただし、execveでは、ラッパー実行可能ファイルをシェルスクリプトとして実装することはできません。また、各マシンのネイティブ実行可能ファイルをコンパイルするには、多くのメンテナンスが必要になります。
Pythonプログラムごとに起動シェルスクリプトを作成します。すべてのシェルスクリプトは、Pythonインタープリターを選択するための同じロジックを共有する場合がありますが、可能であれば、Pythonプログラムごとに個別のシェルスクリプトを使用することは避けたいと思います。
次のように、シェルスクリプトとPythonプログラムの両方として各プログラムを実行できるようにするために、ある種のハックを作成します。
他にアイデアはありますか?
c - 複数のプログラムの execve()
からの入力を求める 2 つのプログラム X と Y があるとしますstdin
。X と Y は、たとえば A の 3 分の 1を使用して実行fork()
されます。execve()
何が起こっているかというと、X が最初にスケジュールされています。X が scanf ステートメントに到達すると、Y がスケジュールされ、X が入力を取得しなくなります。どうやって世話をするのですか?
c - プログラムの動作が、その子が終了する順序に依存するのはなぜですか?
私はいくつかのプログラムを実行し、fork()
その後にexecve()
3 番目のプログラムを使用しています。これらのプログラムが意図したことはすべて実行されますが、最後に 3 番目のプログラムが返されません...つまり、コマンド プロンプトが表示されません。
wait()
呼び出しプログラムでコマンドを使用するexecve
と、wait ステートメントの順序がプログラムの終了順序と一致する場合にのみ、のプログラムが返されexecve
ます。なぜでしょうか?
簡略化されたコードは次のとおりです。
child1 が最初に終了すると、正常に動作します。./xyz と ./abc はいくつかの単純な処理があり、制御が終了します。
c - C - execve を介してパイプを渡す
私は学校のプロジェクトに取り組んでいますが、それを解決しようとしている方法が可能かどうかさえわかりません。このプロジェクトでは、プログラムを作成し、2 つの子をフォークして、pid を他のプログラムに置き換える必要があります。2 つの子は、read() と write() を使用してパイプを介して話します。
私が持っている質問は、execve を使用してパイプをその子に渡すことです。私が今持っているのはこれです:
親プログラム - fork し、子に execve を呼び出す:
dup2 を使用して stdin および stdout にリダイレクトしようとしています。次に、子供たちで、次のように標準出力と標準入力を読み書きしようとします。
子 - stdin からのデータの読み取り
あなたの提案に従ってdupを使用していますが、本来あるべきようにstdinとstdoutにアクセスしているかどうかはわかりません。
--参考までにもう一人の子です。
--違いがある場合は、他の子 (パイプに書き込んでいる子) が正常に書き込んでいるように見えますが、上の子はパイプから読み取ることはなく、上の outFile は常に空です。
* *まだ同じことが起きている
私はあなたが私のために問題を解決してくれることを望んでいるわけではありません。ありがとうございました。
私は積極的に作業する例を探していますが、私の問題が今どこにあるのかを実行する子からのコードを示すものは見つかりません。
linux - 関数 execve の実装 (unistd.h)
関数 execve の実装 (x86_64 Linux で) を確認するにはどうすればよいですか? ライブラリ unistd にあります。execveを呼び出さずに、アセンブラを使用して外部プログラムを呼び出す方法を知りたいので、これが必要です。execve という名前のシステムコールがあることは知っていますが、それをどのように使用すればよいかわかりません。
char * 型と char * [] 型の変数をレジスタに入れるにはどうすればよいですか?
c - ファイル記述子の受け渡し-実行(型キャスト)
コマンドを介してファイル記述子を渡し、execve()
反対側でファイル記述子にアクセスするにはどうすればよいのでしょうか。ファイル記述子をリダイレクトするために使用できることは知っていdup2
ますが、それはできません。実際にファイル記述子を子に渡して、子で使用する必要があります。
私がこれまでにしたこと:
親はpipe
次のような+引数を作成します。
次に、子供はexecve
次fork()
のように電話をかけます。
次に、リーダープログラムで、渡されたパイプ記述子にアクセスしようとします。
argv[2]
パイプ記述子を参照している必要があり、次にパイプargv[1]
の書き込み端に移動する必要があります。ここで型キャストを別の方法で行う必要があることはほぼ間違いありませんが、私が試したすべてがうまくいくわけではありません。
注:このプログラムの作業バージョンを使用dup2
して、子にリダイレクトしstdin
たりstdout
、子にリダイレクトしたりしていますが、プロジェクトの指示に従って、実際にパイプ記述子を子に渡す必要があります。
どんな助けでも大歓迎です。