我正在尝试使用Java创建一个小程序来分叉两个新的子进程。它是针对初学者的编程课程的,他们的教程都使用C语言编写,因此,我正在寻求一些帮助,以了解此技巧,以及将其适应基于Java的程序的最佳方法(最终在它)。
#include <sys/types.h> #include <stdio.h> #include <unistd.h> int main() { pid t pid; /*fork a child process*/ pid = fork(); if (pid < 0) { /*error occurred*/ fprintf(stderr, "Fork Failed"); return 1; } else if (pid == 0) {/*child process */ execlp("/bin/ls", "ls", NULL); } else { /*parent process*/ /*parent will wait for the child to complete */ wait(NULL); printf("Child Complete"); } return 0; }
更新:
我应该给每个子进程及其父进程附加一个ID,在子进程执行时打印信息,并在终止时打印终止通知。现在,我看到上面的这段代码列出了当前目录的内容,并在进程终止时显示“ Child Complete”。列出整个目录是否被视为一个过程?如果是这样,第二个新子进程将在哪里/如何出现?
在Java中,可能看起来像-
public static void main(String[] args) { try { Process p = Runtime.getRuntime().exec("/bin/ls"); final InputStream is = p.getInputStream(); Thread t = new Thread(new Runnable() { public void run() { InputStreamReader isr = new InputStreamReader(is); int ch; try { while ((ch = isr.read()) != -1) { System.out.print((char) ch); } } catch (IOException e) { e.printStackTrace(); } } }); t.start(); p.waitFor(); t.join(); System.out.println("Child Complete"); } catch (Exception e) { e.printStackTrace(); } }