小编典典

使C fork代码适应Java程序

java

我正在尝试使用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”。列出整个目录是否被视为一个过程?如果是这样,第二个新子进程将在哪里/如何出现?


阅读 224

收藏
2020-11-26

共1个答案

小编典典

在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();
    }
}
2020-11-26