C を使用してプロセスのツリーを構築する必要がありますfork()
。標準入力から一連の数字 (例: 1 5 0 3) を取得し、それらの数字から各ノードの子の数がわかります。例を挙げると、ルート プロセスが 1 つの子を作成し、この 1 つの子が独自の 5 つの子を作成し、それらの 5 つの子から最初の子は子を作成せず、2 番目の子は 3 つの子を作成し、次に 'やり直した。pstree
これが完了すると、ツリーを描画するルート プロセスが呼び出されます。
例の写真を次に示します。
私の質問は、特定のノードから新しい子を作成するにはどうすればよいですか? 1 つは 0 個の新しいプロセスを作成する必要があり、次は 3 個のプロセスを作成する必要があります。特定の子だけが新しい子を作成し、すべての子を作成しないように区別する方法がわかりません。また、通常、 get が呼び出されpstree
た時点でツリーは既になくなっているため、 の使用方法もわかりません。pstree
子を最初に実行できることはわかってwait()
いますが、最後の子には待機する子がいないため、終了が速すぎます。
サンプルを作成するコードを書きました。さまざまな入力に対してこれを一般化する方法のアイデアが必要です。また、誰かがこのコードから pstree を呼び出す方法を教えてもらえますか?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
pid_t temppid;
pid_t temppid2;
int root_pid;
int status;
root_pid = getpid();
pid = fork(); // creates a child from root
if (pid == 0) { // if child
pid = fork(); // fork again (child#1)
if (pid != 0) { // if not child of child#1
temppid = getpid(); // get pid
if (getpid() == temppid) { // create child#2
pid = fork();
if (pid == 0) {
temppid2 = getpid();
if (getpid() == temppid2) { // create child#1
fork();
}
if (getpid() == temppid2) { // create child#2
fork();
}
if (getpid() == temppid2) { // create child#3
fork();
}
}
}
if (getpid() == temppid) { // create child#3
fork();
}
if (getpid() == temppid) { // create child#4
fork();
}
if (getpid() == temppid) { // create child#5
fork();
}
}
}
else {
// create another child from root
pid = fork();
if (pid == 0) {
// run pstree in this child with pid from root
}
}
while (1) {
sleep(1);
}
}