問題タブ [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.
c++ - execv の戻り値を取得するにはどうすればよいですか?
私はC ++に本当に慣れていないので、次から出力を取得しようとしています:
C++ と RHEL 6 でプログラミングしています。
FTP クライアントのように、実行中の外部プログラムからすべてのステータス更新を取得したいと考えています。誰かが私にこれを行う方法を教えてもらえますか?
c - Linuxでフォークされた子プロセスからすぐに戻る方法は?
私は Linux C 開発に慣れていません。
私のコード:
私がやりたいことは、子プロセスで開始された新しいプロセスからすぐに戻ることです。
現在のプログラムでexecv (workdir , args);
は、戻りません。(長時間実行されるプロセスを開始する必要があります)。
私がやりたいことは、この長期実行プロセスを開始し、すぐに C コードに戻って、C プログラムを終了できるようにすることです。
これどうやってするの?開始した新しい子プロセスをデーモンにするかもしれませんが、API 呼び出しでそれを行うにはどうすればよいですか?
c - gdb を execv に追従させるには? 「follow-exec-mode」にもかかわらず動作しない
私は2つの簡単なプログラムを書きました:
と
gcc -g を使用して、それらを適切な出力ファイルにコンパイルしました。gcc (Ubuntu/Linaro 4.4.4-14ubuntu5.1) 4.4.5 を使用して Ubuntu 10.10 を実行しています。
GNU gdb (GDB) 7.2-ubuntu を使用して最初のプログラムをデバッグしているときに、最初の execv ステートメントまでステップ実行できますが、その後は 2 つのファイルが実行され続けます。follow-exec-mode を new に設定しても、2 番目のプログラムにステップ インできません。catch exec を設定すると、gdb は execv への呼び出しごとに停止します (2 番目のプログラムのリンクされたソースがないと、gdb を終了できません!?) が、できません。 「新しい」(execがプロセスを置き換えるため)下位プログラムへの呼び出しをステップオーバーします。
では、これを行うにはどうすればよいでしょうか。新しいプロセスに足を踏み入れる方法があるはずですよね?私は何か間違ったことをしていますか?
乾杯
c++ - prctl(PR_SET_PDEATHSIG, SIGNAL) は、親プロセスの出口ではなく、親スレッドの出口で呼び出されます
子プロセスにフォークしているプロセスがあります。親プロセスが存在する場合、子プロセスは存在してはなりません。
::prctl(PR_SET_PDEATHSIG, SIGKILL)
そのため、親プロセスが終了した場合に子プロセスを呼び出して、それを強制終了します。
最終的に何が起こるかは、親スレッドの呼び出しpthread_exit
であり、そのスレッドは子プロセスを強制終了する触媒になります。
これが私のコードです:
親.cpp:
child.cpp:
コマンドラインで次を実行します。
同時に、次のコマンドを実行して子のステータスを確認します。
子供が行方不明になります。child で prctl 呼び出しを実行しても、機能しなくなりません。
prctlのman ページSIGKILL
には、親スレッドではなく、親プロセスが終了したときにこの呼び出しを呼び出す必要があることが記載されているようです。
親スレッドの代わりに親プロセスが終了したときに、prctl に子を強制終了させる方法はありますか?
c++ - 警告なしでexecv()を使用するにはどうすればよいですか?
私はGCC4.2でMacOS-XLionに取り組んでいます。このコードは機能しますが、修正したい警告が表示されます。
警告:文字列定数から'char*'への非推奨の変換
警告を抑制したくない、まったく警告を出さないようにしたい。これはC++コードであり、Cではありません。
char * const(つまり、execv()に必要なタイプ)を使用しても、警告が生成されます。
ありがとうございました。
c - execv はどのようにパイプから出力を取得しますか?
古い宿題の質問を参照してください:/* implementing "/usr/bin/ps -ef | /usr/bin/more" */
パイプの使用。
fd を標準出力にリダイレクトした後、execv はそれからどのように読み取りますか。コマンドを実行する前に標準入力から読み取るのは execv に組み込まれていますか? 私はこの概念を得ることができません。
linux - Linuxのデーモンがexecvでアプリを起動できません
Fedora 16で実行されているコマンドアンドコントロールデーモンがあり、補助アプリケーションの1つを起動するなど、さまざまなサービスを提供します。これはかなり長い間私たちのために働いてきました。
実際、それはまだ機能します-いくつかのシステムで。
デーモンプロセスは(正常に)フォークしてから、execv()を呼び出します。
テストするために別のシステムをセットアップすると、突然失敗し、execv()が失敗して127を返します。
どちらのシステムもFedora16を実行していますが、問題のあるシステムは3.3.7-1.fc16.x86_64ですが、すべてが正常に機能する別のシステムは3.4.2-1.fc16.x86_64を実行しています。
デーモンを停止してスタンドアロンアプリケーションとして実行すると、プロセス全体が正常に機能します。
execv()および関連するドキュメントを検索すると、127エラーコードが表示されません。これまでのところ、Linuxの「コマンドが見つかりません」エラーだけが推測されます。それが何を意味するのかわからないので、問題を解決するのが難しくなります。
誰かが127リターンコードの意味を教えてもらえますか?
ありがとう!
c - Cでシェルを書いても何も返らない
シェルを実行すると、" Shell>
" というプロンプトが表示されます。のようなコマンドを入力するls
と、" " という新しい行がShell>
再び作成されます。
ヒットしていないように見える理由はありexecv
ますか?
c - コマンド行からコマンドを読み取り、Cで実行する
コマンドライン(linux / unixコマンド)からユーザー入力を取得し、プログラム内で実行するプログラムを作成しています。
これまでの私のステップ:
- 入力したコマンドの数をユーザーに尋ねる
- 子プロセスを作成するためのFork()
- 子PIDと親PIDを出力します
- ユーザーが各コマンドを入力できるようにし、各入力をargvのインデックスに読み込みます
- execvを使用して、argv内で各コマンドを実行します
主な問題は、実行時にexecvコマンドの「bin /ls/」を実行するだけであるということです。
プログラムの実行からの出力例を次に示し
ます。コマンドの数を入力します。2
子のPIDは3487です。親のPIDは3485です
。UNIXコマンドを入力します。lsUNIXコマンドを入力します。-alCMDで「LS」と
入力した場合のファイルのリスト
LINE
プロセスが完了しました。
そして、これが私のソースコードです:
c - execv (C 言語) を使用して Linux コマンド プロンプトからコマンドを実行する
これまでのところ私が混乱している唯一の部分は、現在の作業ディレクトリとして最初のパラメーターを使用して execv をセットアップする方法です。私は両方の「。」を試しました。および "~" は、どちらも画面に対して何も実行していません。「/」も同様。および「/~」。execv を次のように実行する方法について混乱しています。
そして、現在のディレクトリ、またはファイルと同じディレクトリ (誰がそれを使用しているかによって異なります) で、プログラムの実行後に (argv に格納されている) コマンドを実行します。
私のコード:
出力例: