system() を試しましたが、どういうわけかセカンダリ プログラムを実行すると、メイン プログラム (セカンダリ プログラムを実行するプライマリ プログラム) がハングします。
2番目の問題は、メインプログラムでセカンダリプログラムのプロセスIDを取得するにはどうすればよいですか?
したい親プロセスでfork
。
Fork はまったく新しいプロセスを作成し、子プロセスpid
を呼び出しプロセスと0
新しい子プロセスに返します。
子プロセスでは、次のようなものを使用execl
して、目的のセカンダリ プログラムを実行できます。waitpid
親プロセスでは、子が完了するのを待つために使用できます。
以下に簡単な例を示します。
#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;
}
fork を使用して新しいプロセスを作成し、次に exec を使用して新しいプロセスでプログラムを実行します。そのような例はたくさんあります。