8

system() を試しましたが、どういうわけかセカンダリ プログラムを実行すると、メイン プログラム (セカンダリ プログラムを実行するプライマリ プログラム) がハングします。

2番目の問題は、メインプログラムでセカンダリプログラムのプロセスIDを取得するにはどうすればよいですか?

4

2 に答える 2

13

したい親プロセスで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;
}
于 2012-11-26T02:52:28.147 に答える
3

fork を使用して新しいプロセスを作成し、次に exec を使用して新しいプロセスでプログラムを実行します。そのような例はたくさんあります。

于 2012-11-26T02:28:46.393 に答える