progress&signal
1.替换一个进程映象 :exec()函数组
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main(){
printf("running ps with execlp\n");
execlp("ps","ps",0);
printf("done\n");
exit(0);
}
2.复制一个进程映象
一段代码有两个进程在享用,所以需要区分,方法就是父进程调用fork()的返回值不是零,而子进程的是零.
一般,父进程要等待子进程的結束,所以要用函数wait();
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main(){
pid_t pid;
int stat_value;
pid_t child_pid;
char *message;
int n;
int exit_code;
printf("fork program starts\n");
pid=fork();
switch(pid){
case -1:perror("fork failed\n");
exit(1);
case 0:message="This is child";
n=5;
exit_code=37;
break;
default:
message="This is father";
n=3;
exit_code=0;
break;
}
for(;n>0;n--){
puts(message);
sleep(1);
}
if(pid!=0){
child_pid=wait(&stat_value);
printf("Child finished : PID = %d\n",child_pid);
}
exit(0);
}
Ctrl+c=SIGINT;
Ctrl+\=SIGQUIT;
3.信号处理(用signal()函数)
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
void ouch(int sig){
printf("OUCH! I GOT A SIGNAL %d\n",sig);
(void)signal(SIGINT,SIG_DFL);////对中止信号采取default方法
}
int main(){
(void)signal(SIGINT,ouch);
while(1){
printf("Hello\n");
sleep(1);
}
}
4.信号处理(用sigaction()函数)
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
void ouch(int sig){
printf("OUCH! I GOT A SIGNAL %d\n",sig);
//(void)signal(SIGINT,SIG_DFL);////对中止信号采取default方法
}
int main(){
struct sigaction act;
//(void)signal(SIGINT,ouch);
act.sa_handler=ouch;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGINT,&act,0);
while(1){
printf("Hello\n");
sleep(1);
}
}
实在是令人惊异的是看到别人学习更多的激情和关注的Linux
回复删除我会很高兴地看到你,访问我的博客。你总是欢迎有。这里是地址:
http://sightbywalk.blogspot.com/