【问题标题】:How can I simulate a process running?如何模拟正在运行的进程?
【发布时间】:2015-04-09 23:44:36
【问题描述】:

所以我想创建一个进程并让它运行一段时间,然后调用 SIGINT 并杀死它。

所以我所做的是创建了一个 struct pcb(进程控制块),当我让这个进程运行时我设置了

mypcb->status = RUN //RUN would just be defined as 0, SUSPEND as 1, etc

基本上我有一个管理我所有进程的函数,我可能在这个函数中有类似

startprocess(processnum);
wait 10 seconds
killprocess(processnum);

然后在我的 startprocess 函数中我调用 fork,而在子进程中(当 fork() == 0 时),我希望让这个进程无限期地运行。我知道这可能可以通过使用 execvp 来完成,但我不想将上下文切换到另一个 exe 文件,我只想保持进程运行,或者至少让它看起来像子进程还活着,这样我可以返回并在我的 killprocess 函数中对 pid 调用 SIGINT。

注意我把每个进程的pid都保存在了

mypcb->pid

所以我不需要传递任何东西,我只需要一种方法来保持进程运行,这样我就可以回去杀死它。

希望我的问题是有道理的,基本上我只是想知道如何在不做任何事情的情况下保持进程运行,以便以后可以杀死它。

谢谢!

【问题讨论】:

    标签: c exec fork execvp sigint


    【解决方案1】:

    听起来你要做的就是让一个进程永远运行,什么都不做(在这种情况下,问题的其余部分是无关紧要的)。

    你可以简单地使用类似的东西:

    while(1)
    {
        /* no code in between the {} */
    }
    

    永远不会有任何作用。

    【讨论】:

    • 实际上,为了避免进程占用 cpu 资源,while 循环的内部应该调用 usleep() 或 nanosleep()
    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2021-11-28
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多