加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使C fork代码适应Java程序

发布时间:2020-12-16 09:54:43 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 Java创建一个小程序来分叉两个新的子进程.这是一个初学者的编程类,他的教程是C语言,所以我正在寻找一些帮助来理解这段代码试图做什么以及将它适应基于Java的程序的最佳方法(最终建立在它). ?#include sys/types.h#include stdio.h#include un
我正在尝试使用 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();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读