代码拉取完成,页面将自动刷新
#include "jobs.h"
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include "extern.h"
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
void ctrl_z(int sig)
{
NODE *pi=NULL;
pi=(NODE *)malloc(sizeof(NODE)) ;
pi->num=NUM;
pi->pid=PID;
strcpy(pi->state,"stopped");
strcpy(pi->jcmd," ");
head=jobs_link(pi);
kill(PID, SIGSTOP);
}
NODE *jobs_link(NODE *pi)
{
NODE *pf,*pb;
pb=head;//将后台运行程序列表的头指针保存下来
if(head == NULL) {//情况一:列表中没有后台进程执行
NUM=pi->num;
head=pi;
pi->next=NULL;//创建列表并且保存在全局变量head中
} else {//情况二:将新的后台执行的进程添加到列表中
while(pb->next != NULL) {//循环遍历列表直到列表的最后一项
pf=pb;
pb=pb->next;
}
NUM=pi->num;
pb->next=pi;
pi->next=NULL;//将新的后台执行的进程添加到列表中
}
NUM++;
return (head);
}
void output_jobs()
{
NODE *p;
p=head;
if(head != NULL) {
do {
printf("[%d] %d %s %s\n",p->num,p->pid,p->state,p->jcmd);
p=p->next;
}while(p != NULL);
}
else
printf("no jobs in list!\n");
}
void fg_jobs()
{
int num;
NODE *p=NULL;
pid_t pid=0;
p=head;
if(cmd[0].args[1] != NULL) {
sscanf(cmd[0].args[1],"%d",&num);
if(p == NULL) {
printf("no jobs!!\n");
}
while(p != NULL) {
if(num == p->num) {
pid=p->pid;
break;
}
p=p->next;
}
kill(pid,SIGCONT);
waitpid(pid,NULL,WUNTRACED);
}
}
void bg_jobs()
{
int num;
NODE *p=NULL;
pid_t pid=0;
p=head;
if(cmd[0].args[1] != NULL) {
sscanf(cmd[0].args[1],"%d",&num);
if(p == NULL) {
printf("no jobs!!\n");
}
while(p != NULL) {
if(num == p->num) {
pid=p->pid;
break;
}
p=p->next;
}
kill(pid,SIGCONT);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。