i)は(システムを試してみましたが、二次プログラムが実行さ何とかたときに、私のメインプログラム(二次を実行し、主プログラム)C++プログラム内で実行可能ファイルを起動し、そのプロセスIDを取得する方法(linux)?
をハングアップし、第二の問題は、私は私のメインの二次プログラムのプロセスIDを取得します方法ですプログラム?
i)は(システムを試してみましたが、二次プログラムが実行さ何とかたときに、私のメインプログラム(二次を実行し、主プログラム)C++プログラム内で実行可能ファイルを起動し、そのプロセスIDを取得する方法(linux)?
をハングアップし、第二の問題は、私は私のメインの二次プログラムのプロセスIDを取得します方法ですプログラム?
forkを使用して新しいプロセスを作成し、execを実行して新しいプロセスでプログラムを実行します。そのような例がたくさんあります。
親プロセスには、fork
が必要です。
フォークはまったく新しいプロセスを作成し、子プロセスのpid
を呼び出しプロセスに返し、0
を新しい子プロセスに返します。
子プロセスでは、execl
のようなものを使用して、目的のセカンダリプログラムを実行することができます。 親プロセスでは、waitpid
を使用して、子プロセスが完了するまで待つことができます。ここで
は、簡単な説明のための例です:)((フォークをやろうとしたとき、私はフォークを行うときi)は次のエラーを取得しています
#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
#include <cstdio>
#include <cstdlib>
int main()
{
std::string cmd = "/bin/ls"; // secondary program you want to run
pid_t pid = fork(); // create child process
int status;
switch (pid)
{
case -1: // error
perror("fork");
exit(1);
case 0: // child process
execl(cmd.c_str(), 0, 0); // run the command
perror("execl"); // execl doesn't return unless there is a problem
exit(1);
default: // parent process, pid now contains the child pid
while (-1 == waitpid(pid, &status, 0)); // wait for child to complete
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
{
// handle error
std::cerr << "process " << cmd << " (pid=" << pid << ") failed" << std::endl;
}
break;
}
return 0;
}
これは 'if(!WIFEXITED(status)&&? – Jeroen
@Jeroen私はそれが 'WIFSIGNALED 'であると信じていますか?おそらく' if(WIFSIGNALED(status)|| WEXITSTATUS (ステータス)!= 0) ' –
、それは私に致命的IOエラー11(リソースを与えます一時的に利用不可能)、時にはその(成功)または(そのようなファイルやディレクトリはありません) – user1265478
http://advancedlinuxprogramming.com/を読んでください –