- 论坛徽章:
- 0
|
回复 #41 leshy 的帖子
在pcwkt兄的代码基础上修改了一下,贴出来,测试过,可用
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/types.h>
- #include <signal.h>
- char *filename = "/tmp/tmp_proc";
- pid_t check_proc_use_file(char *filename)
- {
- FILE *fp = NULL;
- pid_t pid = 0;
- if(access(filename,F_OK) != 0)
- {
- fp = fopen(filename,"w");
- fprintf(fp,"%d\n",getpid());
- }
- else
- {
- fp = fopen(filename,"r+");
- fscanf(fp,"%d",&pid);
- if(!(pid > 0 && kill(pid,0) == 0))
- {
- ///proc exist
- fseek(fp, 0L, SEEK_SET); //²»´æÔÚ
- fprintf(fp,"%d\n",getpid());
- pid = 0;
- }
- }
- fclose(fp);
- return pid;
- }
- void sig_handler_term(int sig)
- {
- printf("killed by kill cmd etc\n");
- unlink(filename);
- exit(0);
- }
- void sig_handler_int(int sig)
- {
- printf("killed by kill ctrl+c etcs\n");
- unlink(filename);
- exit(0);
- }
- int main(int argc,char **argv)
- {
- pid_t p_id,status;
- FILE *fp = NULL;
- signal(SIGTERM,sig_handler_term);
- signal(SIGINT,sig_handler_int);
- if(argc !=2)
- {
- printf("pls use like 'proc start' or 'proc stop'\n");
- exit(0);
- }
- if(strncasecmp(argv[1],"start",5) == 0)
- {
- //start proc
- status = check_proc_use_file(filename);
- if(status >0)
- {
- printf("%d already exist\n",status);
- exit(2);
- }
- while(1)
- ;
- }
- else if(strncasecmp(argv[1],"stop",4) == 0)
- {
- //stop proc
- fp = fopen(filename,"r");
- fscanf(fp,"%d",&p_id);
- kill(p_id,SIGKILL);
- unlink(filename);
- }
- else
- {
- printf("param error,pls use start or stop\n");
- exit(0);
- }
- return 0;
- }
复制代码 |
|