如何在FreeBSD下同时的并发1000个进程???我的办法是否可行????

Laney 2005-05-13 11:21:18
我想测试log4cpp(源于log4j这个java的日志包)的写日志的软件包,在1000个并发的进程向同一个目的地(同一个文件)写日志时会不会出现丢失.
我的办法如下:
写一个循环1000次的程序

#include <stdio.h>
void main()
{
for (int i=0; i<1000; i++)
printf("./log_test & \n"); /* log_test 即是我编译号的使用log4cpp记录日志的程序*/
}

此段代码编译为test,然后在shell下运行
./test | sh

通过top命令就看到许多的top_test在运行
我不知道这个算不算是并发的进程,因为有多少个log_test也有多少个sh的shell在后台供log_test运行时使用.

有没有采用fork的方法呢???一个父进程创建一个子进程?
代码该如何去写???
...全文
146 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
alaiyeshi 2005-08-22
  • 打赏
  • 举报
回复
就是说你的sleep(2)没用
我是用的临界区,一个个来,谁抓到了,谁去写
ps :
搂主,该结贴了
Laney 2005-05-17
  • 打赏
  • 举报
回复
楼上什么意思呢?
gaoxianfeng 2005-05-17
  • 打赏
  • 举报
回复
gz...
Wolf0403 2005-05-16
  • 打赏
  • 举报
回复
第一个方法中 printf 输出 "exec ./log_test & \n" 应该可以避免 1000 个 sh 进程的出现。第二个方法中没有必要 sleep,另外不清楚 FreeBSD 中的 for k 和 vfork 的差别——旧式 UNIX 中这种情况应该使用 vfork 代替 fork
Laney 2005-05-16
  • 打赏
  • 举报
回复
现在我使用了另一种方法,不知道这个是比起上一个来是否可行:

int main(int argc, char **argv)
{
int i = 0;
pid_t pid;

for (i = 0; i < 1000; ++i) {
if ((pid = fork()) < 0)
return -1;
if (0 == pid) {
sleep(2);
execl("./log_test", "log_test", NULL);
}
}
return 0;
}
Laney 2005-05-16
  • 打赏
  • 举报
回复
up
踏岸寻柳 2005-05-16
  • 打赏
  • 举报
回复
完全可以
Laney 2005-05-13
  • 打赏
  • 举报
回复
不过这个使用了管道把程序输出到一个sh的shell中,相当于创建了1000个sh,一个sh下有一个log_test的进程在运行

23,125

社区成员

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

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