Cでは、外部プログラムを実行してこのプログラムのPIDを取得する最良の方法は何ですか? ここでfork()の使用についていくつかの答えを見ました......しかし、私が理解しているように、fork()の現在のproccessを作成し、子を作成します。可能であれば、私は完全に分離されたコンテキストを作りたいと思っています...... PIDを取得する理由は、これを将来正確に処理することです。サーバーがクライアント上のいくつかのプログラムを起動するためのコマンドを送信できるときにクライアント/サーバープログラムを構築しています。これらのプログラムは外部であり、同じ名前/実行可能ファイルを同時に実行することができます(これが私がプログラム名でpidを見つけることができない理由です)。また、これらのプログラムは 'バックグラウンド'で実行する必要があります....私は、私の呼び出し関数をロックすることはできません。 このシナリオでfork()が助けになるかどうか分かりません。C - バックグラウンドで外部プログラムを起動してpidを取得
0
A
答えて
0
私がしたいのはposix_spawn
です。それはfork
よりも使用する方がはるかに簡単だとIMOは、多くの、より直感的に感じている:
#include <spawn.h>
#include <string.h>
#include <stdio.h>
extern char **environ;
int main() {
pid_t pid;
char *argv[] = {"gcc", "file.c" (char*)0};
int status = posix_spawn(&pid, "/usr/bin/gcc", NULL, NULL, argv, environ);
if(status != 0) {
fprintf(stderr, strerror(status));
return 1;
}
return 0;
}
+0
これは私が必要とするものを正確に見える!私はここでテストして報告します:) Tks! –
+0
ちょっとした問題があります....私はこの問題を解決できません:(私は間違っていますか?私は実行可能ファイルを直接(shなしで)開き、すべて正常に動作しています。 htopを使ってpidが正しいことを確認することができます。しかし、私が送るシグナル(Cまたはコマンドラインのどちらでも)は何もしません。 –
関連する問題
- 1. C#で起動したアプリケーションのPIDを取得するには
- 2. リモートでバックグラウンドで起動されたジョブのPIDを取得する
- 3. python、ulimitで外部プログラムを起動
- 4. 外部プログラムを起動してCSVファイルを渡すには?
- 5. バックグラウンドでプロセスを起動して出力を取得する
- 6. sshがバックグラウンドでスクリプトを実行し、そのpidを取得
- 7. プログラムでC++(ウィンドウ)でシステム起動時間を取得する
- 8. Bash関数:バックグラウンドでプログラムを起動し、PIDとパイプ出力を決定します。
- 9. nohupで起動されたプロセスのPIDをssh経由で取得します
- 10. 正確なパスを知らずにC#で外部プログラムを起動する
- 11. Pythonスクリプトを実行して、cでスクリプトpidを取得
- 12. 外部アプリを起動して起動するのを待つ
- 13. Windows起動プログラム情報を取得
- 14. シェルスクリプトのバックグラウンド関数からPIDを取得
- 15. C++シェル()でPIDを取得していますか?
- 16. .netから別のユーザーとして外部プログラム(プロセス)を起動する方法
- 17. C++ makefile install:起動時にプログラムを起動してリブートする
- 18. cordova-inappbrowser-pluginで起動した外部サイトのURLを取得する
- 19. 外部プログラムを実行してFirefox-Addonでリターンコードを取得する方法
- 20. 外部プログラムからのデータの取得
- 21. asp.netから外部プログラムを起動する
- 22. Goプログラム内から外部エディタを起動しようとしています
- 23. Bashでevalから起動されるプロセスのPIDを取得するには?
- 24. httpdの起動 - pidファイルの取得中にエラーが発生しました。(ヌル)
- 25. 外部電源でAndroidを起動
- 26. C#でホットキーを使用してプログラムを起動するには?
- 27. JavaScriptを使って外部プログラムを呼び出す(例:Cプログラム)
- 28. プログラムをC++で再起動する
- 29. NodeJSの変数でCプログラムを起動
- 30. バックグラウンドでプロセスとしてCMDを実行し、外部プログラムを開始します。外部プログラムが終了したかどうかを知る方法
研究このスレッド:http://stackoverflow.com/questions/5883462/linux-createprocess#5884588 – cmks
あなたがデーモン(3)を使用することができます安全なpidを他のデーモンと同様に扱います – fghj
'fork()'と 'exec *()'関数のどちらかを使用するのが通常の方法です。 I/Oを再構成したり、パイプ記述子やその他のものを閉じる必要がある場合は、 'posix_spawn()'よりも簡単です。 'posix_spawn()'でそれらを操作することはできますが、それは難しい作業です。 –