- 论坛徽章:
- 1
|
关于进程号获取的问题
- # include <stdio.h>;
- # include <signal.h>;
- void sig_alarm(int signo, siginfo_t *p_sig, void *p_arg)
- {
- fprintf(stderr, "own pid %d, signal from %d\n", getpid(), p_sig->;si_pid);
- }
- void sig_proc()
- {
- struct sigaction sNewAct, sOldAct;
- sNewAct.sa_sigaction = sig_alarm;
- sigemptyset(&sNewAct.sa_mask);
- sNewAct.sa_flags = SA_SIGINFO;
- sigaction(SIGALRM, &sNewAct, &sOldAct);
- }
- int sig_sleep(int nSec)
- {
- sigset_t sigNewMask, sigOldMask, sigSuspMask;
- unsigned int nUnSleep;
- sigemptyset(&sigNewMask);
- sigaddset(&sigNewMask, SIGALRM);
- sigprocmask(SIG_BLOCK, &sigNewMask, &sigOldMask);
- if(nSec >; 0) alarm(nSec);
- sigSuspMask = sigOldMask;
- sigdelset(&sigSuspMask, SIGALRM);
- sigsuspend(&sigSuspMask);
- nUnSleep = alarm(0);
- sigprocmask(SIG_SETMASK, &sigOldMask, NULL);
- return(nUnSleep);
- }
- void endproc()
- {
- exit(0);
- }
- main()
- {
- long pid;
- signal(SIGUSR1, endproc);
- sig_proc();
- if((pid = fork()) == 0) {
- while(1) {
- sig_sleep(0);
- }
- }
- else {
- while(1) {
- sleep(5);
- kill(pid, SIGALRM);
- }
- }
- }
复制代码
在linux下可以 |
|