利用多进程定时播放,关闭音乐播放器
主进程监控时间,一个子进程负责播放,一个进程负责关闭, 如要更多时间控制可以增加子进程。
当然,通过if判断,一个子进程也可完成多种操作。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>int closejc(){char *file=tmpnam(NULL); //生成临时文件freopen(file,"w",stdout); system("ps -a"); //列出进程到临时文件freopen("/dev/tty","w",stdout); //取消重定向FILE *f=fopen(file,"r");char o[100];while(fgets(o,100,f)!=NULL){char *pd=strstr(o,"deepin-music"); //杀死运行的deepin-music 程序进程if(pd!=NULL){char *bz=strtok(o," "); //提取进程号// int ps=atoi(bz);// printf("%d\n",ps);char ps[20];snprintf(ps,20,"kill -9 %s",bz); //拼接kill -9 进程号 system(ps); //kill -9 杀死bz号进程}}return 0;
}int main(void){int pi[2];pipe(pi);int cs[2];pipe(cs);pid_t pd=fork();if(pd<0){perror("no york");exit(-1);}if(pd==0){ //接收open 开始播放音乐close(pi[1]);char o[30];read(pi[0],o,30);if(memcmp(o,"ok",2)==0){system("deepin-music");}_exit(0);}
//-----------------------------------------------------------pd=fork();if(pd<0){perror("no fork");exit(-1);}if(pd==0){close(cs[1]);char o[30];read(cs[0],o,30);if(memcmp(o,"no",2)==0){closejc();}_exit(0);}//---------------------------------------------------close(pi[0]);close(cs[0]);char o[10];struct tm* tp;time_t tim;char bz[][7]={"18611","18711"}; //启动,关闭时间 格式:时分秒while(1){time(&tim);tp=localtime(&tim);snprintf(o,10,"%d%d%d%c",tp->tm_hour,tp->tm_min,tp->tm_sec,'\0');if(memcmp(bz[0],o,7)==0){memcpy(o,"ok",3);write(pi[1],o,3);}if(memcmp(bz[1],o,7)==0){memcpy(o,"no",3);write(cs[1],o,3);}sleep(1);} return 0;
}