fork + execvp

kgzhw 2012-07-02 04:38:01
我使用了fork + execvp去创建一个新的进程,创建成功,但是使用ps -ef查看进程时发现test进程名变成了[test],我查了一下带方括号的进程是内核进程,不知道怎么建立一个普通的进程。请高手指点!
代码如下:

#include <stdio.h>
#include <unistd.h>

int main()
{
pid_t pid = fork();
if(0 ==pid )
{
execvp("/opt/testdir/test", "");
exit(0);
}
while(1)
{
printf("p pgressrunning\n");
sleep(1);
}
}
...全文
197 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgzhw 2012-07-04
  • 打赏
  • 举报
回复
已经解决代码如下:
#include <stdio.h>
#include <unistd.h>

int main()
{
pid_t pid = fork();
if(0 ==pid )
{
char *argv[] = {"/opt/testdir/test", NULL}
execve( "/opt/testdir/test", argv, NULL);

exit(0);
}
while(1)
{
printf( "p pgressrunning\n ");
sleep(1);
}
}
kgzhw 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
学习。
都是进程,我感觉没什么区别。
这是cu上的别人的回答:
Under the -f flag, ps tries to determine the current command name and arguments both of which may be changed asynchronously by the process. These are then displayed.……
[/Quote]

估计是我表述错误了,重点是编程实现启动常规进程,而不是ps命令。
happylifer 2012-07-03
  • 打赏
  • 举报
回复
学习。
都是进程,我感觉没什么区别。
这是cu上的别人的回答:
Under the -f flag, ps tries to determine the current command name and arguments both of which may be changed asynchronously by the process. These are then displayed. Failing this, the command name as it would appear without the option -f, is written in square brackets.
内容概要:本文档详细介绍了通过一系列的编程练习加强对 Linux 下进程管理的理解。重点在于深入探讨了基本系统调用的功能,例如创建进程(fork)、获取进程ID (getpid, getppid) 和执行新程序(execvp),同时也讲解了不同形式的进程间通信与同步方法,比如 wait 系统调用来同步子进程的完成情况;此外还包括对进程压力进行了测试以评估系统承载能力,以及设计程序使得结果既能够实现非再现性的并发行为也可以做到结果重现性的串行行为。 这部分涉及的理论和技术包括但不限于:进程的概念及其重要特性,系统调用的基本机制,Linux下的进程管理工具链以及进程同步技术。 适合人群:有一定 Linux 基础的学生或开发者;想要了解 Unix 类系统上进程管理与同步机制的技术爱好者; 使用场景及目标:适用于计算机科学相关课程中的操作系统实验课辅助教材;也可供个人自学时作为参考资料使用。主要目的是帮助读者通过具体的例子熟悉和掌握 Linux 平台上最基本的几种进程管理和同步手段,为进一步的学习和实际应用打下良好的基础。 其他说明:整个教程结合具体的案例进行说明,不仅有助于提高编程技能而且可以帮助用户深入理解 Linux 操作系统的内部工作机制;附有详细的代码段方便动手操作;对于实验步骤均提供了详尽解释便于跟进学习。

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧