当前位置: 技术问答>linux和unix
在学多进程,遇到了一些不懂的地方??
来源: 互联网 发布时间:2017-05-15
本文导语: 我用多线程来循环播放MP3歌曲,(MP3歌曲保存在,pt_SongInfo 队列里面) static void Play( pt_SongInfo Head ) { pid_t pid; pt_SongInfo temp = Head; if (!Head) { printf("The Head list is empty n"); ...
我用多线程来循环播放MP3歌曲,(MP3歌曲保存在,pt_SongInfo 队列里面)
这个代码 我通过
printf("####play function %d##### n",getpid());
打印测试结果:
第一次播放
####play function 1315#####
####play function 1314#####
第2收
####play function 1316#####
####play function 1314#####
第3首
####play function 1317#####
####play function 1314#####
我的疑问是:
1、为什么一个print ,会出现 两行打印信息?
2、无论循环多少次 ####play function 1314##### 一定是存在的。(只要不关闭)
刚刚学 linux 应用编程,不是特别明白,再次请教
谢谢
static void Play( pt_SongInfo Head )
{
pid_t pid;
pt_SongInfo temp = Head;
if (!Head)
{
printf("The Head list is empty n");
exit(0);
}
temp = temp->prior;
while (1)
{
temp = temp->next;
pid = fork();
printf("####play function %d##### n",getpid());
if (pid == 0)
{
pt_shareInfo shm_info = (pt_shareInfo)shmat(shmid, 0, 0);
if (shm_info == NULL)
{
printf("share memory get address error n");
exit(0);
}
strcpy(shm_info->name,temp->name);
shm_info->grandson = getpid();
execlp("madplay","madplay","-a -50",temp->name,NULL);
printf("n@@@@@@@@@@@@@@@@@@@@ NEXT SONG START @@@@@@@@@@@@@@@@@@@@n");
}
else
{
wait(NULL);
}
}
}
这个代码 我通过
printf("####play function %d##### n",getpid());
打印测试结果:
第一次播放
####play function 1315#####
####play function 1314#####
第2收
####play function 1316#####
####play function 1314#####
第3首
####play function 1317#####
####play function 1314#####
我的疑问是:
1、为什么一个print ,会出现 两行打印信息?
2、无论循环多少次 ####play function 1314##### 一定是存在的。(只要不关闭)
刚刚学 linux 应用编程,不是特别明白,再次请教
谢谢
|
调用fork函数后,会将之后所有数据及方法copy到新的子进程中去,所以print函数会打印两次。
1314是父进程pid,每次循环都创建一个子进程,但父进程一直没变。学习一下fork函数就明白了。
1314是父进程pid,每次循环都创建一个子进程,但父进程一直没变。学习一下fork函数就明白了。
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。