📄 jobs.c
字号:
#include "myfun.h"struct job{ int num[MAX/8]; int pid_num[MAX/8]; char status[MAX/8][50]; char name[MAX/8][50];};extern pid_t pid;extern int status;char p_name[MAX/8];int s_i, p_i;struct job myjob;void sig_child(){ strcpy(myjob.status[p_i], "Hold");}void ctrl_z(){ strcpy(myjob.status[s_i], "Stopped"); printf("[%2d]\t%s\t\t%s\n", s_i, myjob.status[s_i], myjob.name[s_i]);// return;}void show_job(){ int i; printf("Num\tStatus\tID\tName\n"); for(i=1; i<=s_i; i++) { printf("[%2d]\t%s\t%ld\t%s\n", myjob.num[i], myjob.status[i] ,myjob.pid_num[i], myjob.name[i]); }}void jobs(char *buf_in){ signal(SIGTSTP, ctrl_z); signal(SIGCHLD, sig_child); char buf[MAX/8]=""; strcpy(buf, buf_in); if(strncmp(buf, "./", 2) == 0) { s_i += 1; strcpy(myjob.name[s_i], buf); myjob.num[s_i] = s_i; strcpy(myjob.status[s_i], "Running"); if((pid=fork()) < 0) { printf("fork error!\n"); exit(1); } else if(pid==0) { execlp(buf,buf,NULL); printf("couldn't execute: %s\n", buf); exit(1); } else { myjob.pid_num[s_i] = pid; waitpid(pid,&status,WUNTRACED); strcpy(myjob.status[s_i], "Stopped"); } } else if(strncmp(buf, "fg", 2) == 0) { if(strlen(buf) < 3) return; printf("Call to fg!\n"); s_i = atoi(strrchr(buf, ' ')); pid = myjob.pid_num[s_i]; strcpy(myjob.status[s_i], "Running"); kill(pid,SIGCONT); waitpid(pid,&status,WUNTRACED); } else if(strncmp(buf, "bg", 2) == 0) { if(strlen(buf) < 3) return; p_i = atoi(strrchr(buf, ' ')); pid = myjob.pid_num[s_i]; printf("Wake up child!\n"); strcpy(myjob.status[s_i], "Running"); kill(pid,SIGCONT); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -