問題タブ [execvp]
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.
c++ - C++、Linux、フォーク、execvp、waitpid、および SIGTSP
私は在宅勤務用の端末を実装しています。
bg ( Background ) と fg ( Foreground ) コマンドを実装する必要があるだけです。
私のコードは次のようになります。
それがフォアグラウンド プロセスである場合 (最後に「&」記号がなかった場合)、ctrl+z ( SIGTSTP ) でフォアグラウンド プロセス (子) を停止し、制御をに戻すことができる必要があります。停止した時点からの父 (私の端末) (waitpid)。
問題は、ctrl+z が押された後 (親がシグナル ハンドル メソッドでコントロールを取得し、kill( child_pid, SIGTSTP ) を使用して子を停止した後)、親が停止した場所から続行しないことです (waitpid )。シグナル処理メソッドが終了した後、どこに続くのかわかりません。
シグナル処理メソッドで run() を呼び出すと機能しますが、再帰は必要ありません。すぐに StackOverFlow を取得できると思います...
シグナル処理メソッドのコードは次のとおりです。
編集:問題になるかどうかはわかりませんが、Linux Ubuntu 12.10 を使用しています。とはいえ、Home Work の場合は、他のシステムで動作させる必要があります。
ありがとう!
c - fork()でexecvpのエラーを取得するにはどうすればよいですか?
私は次のコードを持っています。
私の質問はコードにあります
c - Cで外部コマンドを実行するためにexecvpを使用しようとしています(シェルのようなプログラムで)
そのため、外部コマンドを実行するためのサポートを実装する必要がありました (C プログラミング言語の Linux 用)。これは私がこれまでに持っているものです。履歴関数にreadlineライブラリを使用しましたが、それは無関係です...誰かが私が間違っていることを教えてもらえますか? (私が「execvp」と呼ぶ方法だと思います)だから、ここに私のコードがあります:
java - C++はJavajarを呼び出します
execvpを使用してjavaを呼び出し、以下のコードのような関数を実行したいと思います。
しかし、エラーが発生します:
誰かがこれで私を助けることができますか?どうもありがとう :)
c - execvp/fork -- 失敗した実行をキャッチする方法は?
現在、子プロセスを実行する必要がある C プログラムを作成しています。私は複数の子プロセスを同時に実行していないので、これはかなり簡単です。ビルトイン シェル プログラム (つまり、cat や echo など) は間違いなく正常に実行されていますが、これらのプログラムのいずれかが正常に実行されなかった場合に通知できるようにする必要もあります。次の簡略化されたコードでこれを試しています。
例えば、rm fileThat DoesntExist.txt を実行しようとすると、ファイルが存在しないので失敗と見なしたいと思います。どうすればこれを達成できますか? また、その execvp() 呼び出しは組み込みのシェル プログラムを正常に実行しますが、実行可能ファイルの現在のディレクトリ (つまり、このコードが内部で実行されているプログラム) 内のプログラムは実行しません。現在のディレクトリでプログラムを実行するために他に何かしなければならないことはありますか?
ありがとう!
c - fork/exec/waitpid の問題
waitpid() の結果をチェックして、実行が失敗したかどうかを判断しようとしています。ただし、失敗することがわかっているコマンドを実行して問題を stderr に書き込んでも、以下のチェックは登録されません。このコードの何が間違っている可能性がありますか?
助けてくれてありがとう。
c - 構築された文字列で execvp を使用する際の問題
シェルを作成しようとしていますが、その構築の一部で、ユーザーが入力した文字列 (バッファー) からコードを実行しています。ただし、追加の入力 (e.echo a) を使用して文字列を execvp しようとすると、常にプーチがねじ込まれ、-1 が返されます。なぜだか途方に暮れています。関連する部分は次のとおりです。
c - クラシックC.execvp関数、stdinおよびstdoutリダイレクトでのパイプの使用
パイプとexecvp関数を使用してLinuxCプログラムでbashをシミュレートしたいと思います。例えば
私のプログラムがあります:
このコードは実際に実行されますが、正しく機能しません。このコードの何が問題になっていますか?それは機能しておらず、理由はわかりません。
c - C - Execvp による Bash コマンドの実行
改行で区切られたbashコマンドを含むテキストファイルを入力として受け入れ、テキストファイル内のすべてのコマンドを実行するプログラムShellcode.cを作成したいと思います。たとえば、テキストファイルには次が含まれます。
私はこれを試しました(exec関数の1つで練習を始めるためだけに):
その見返りに、
私は execvp 関数で立ち往生しています。どこで間違ったのでしょうか?
c - execvp()のPATHにディレクトリを追加します
私は、ls、tac、およびdirの実装とともに、Cで小さなコンソールのようなプログラムを書いています。
execvp()関数を使用して、プロセスの分岐した子をオーバーライドしますが、ユーザーが上記の3つのコマンドのいずれかを挿入すると、システムからのバージョンではなく、独自のバージョンを実行する必要があります。
execvp()がシステムPATH変数を使用して、実行可能ファイルをさまざまな場所で検索することを知っています。プログラムでPATHを編集して、execvp()検索の最初の場所としてカスタムディレクトリを追加できますか?
ありがとうございました!