我正在使用 PID 创建一个终止进程
I'm creating a kill process using PID
但问题是我在通过该方法发送之前打印的PID和我在该方法中接收它之后打印的PID完全different.I无法理解。
void killbyPIDprocess(struct process** ptr,char* p)
{
int i=0;
printf("hi");
while(ptr[i]!=NULL)
{
printf("Inside while loop");
printf("%d\n",ptr[i]->pid);
printf("%d\n",*p);
if(strcmp(ptr[i]->pid,p)==0)
{
printf("Kill process of PID %d\n",p);
}
else
{
i++;
}
}
}
在循环方法中,我的条件是
void loop(char *input)
{
bool flag=true;
char **tokens;
struct process **ptr=(struct process*) malloc (BUFFERSIZE);//Is the array that contains pointers to all the processes created.
int ci=0;int i=0;
while(flag==true)
{
input=getInp(input);
tokens=tokenize(input);
if(strcasecmp(*tokens,"kill")==0)
{
strtok(tokens[1],"\n");
char* pid=(char*)malloc (BUFFERSIZE);
pid=tokens[1];
printf("%s",pid);
killbyPIDprocess(ptr, pid);
}
}
输入法只是接受用户的输入。
tokenize 方法使用 strtok 方法对输入进行标记化。如果我输入 kill (PID),它会转到 killbyPIDprocess(ptr,pid) 方法,其中 ptr 是包含结构进程的所有指针的双指针。我在创建过程信息时存储过程信息。我在循环方法中打印的 pid 与我给它的输入相同,即我想通过 killbyPIDprocess 方法终止进程的那个 pid,但是当我通过 killbyPIDprocess 方法传递这个 pid 时,它显示了一些其他值。我还没有开始实际处理终止代码,因为它一直给我错误。我使用 print 语句来跟踪我的代码有多少在工作。我是 C 的新手,自学成才,所以请指出错误。
printf("%d\n",*p);
将为缓冲区中的第一个字符打印数字代码,因此您必须使用 %s
格式说明符 - printf("%s\n", p);
才能获得相同的结果。
此代码 if(strcmp(ptr[i]->pid,p)==0)
也不正确。 process::pid
成员有一个 pid_t
类型,它是一个带符号的整数。在字符串比较例程中使用它是未定义的行为(不确定它是否会编译)。要比较 PID,您必须将字符串数据转换为整数,例如使用 atoi
函数。然后您可以直接将它们与 ==
运算符进行比较。
但问题是我在通过该方法发送之前打印的PID和我在该方法中接收它之后打印的PID完全different.I无法理解。
void killbyPIDprocess(struct process** ptr,char* p)
{
int i=0;
printf("hi");
while(ptr[i]!=NULL)
{
printf("Inside while loop");
printf("%d\n",ptr[i]->pid);
printf("%d\n",*p);
if(strcmp(ptr[i]->pid,p)==0)
{
printf("Kill process of PID %d\n",p);
}
else
{
i++;
}
}
}
在循环方法中,我的条件是
void loop(char *input)
{
bool flag=true;
char **tokens;
struct process **ptr=(struct process*) malloc (BUFFERSIZE);//Is the array that contains pointers to all the processes created.
int ci=0;int i=0;
while(flag==true)
{
input=getInp(input);
tokens=tokenize(input);
if(strcasecmp(*tokens,"kill")==0)
{
strtok(tokens[1],"\n");
char* pid=(char*)malloc (BUFFERSIZE);
pid=tokens[1];
printf("%s",pid);
killbyPIDprocess(ptr, pid);
}
}
输入法只是接受用户的输入。 tokenize 方法使用 strtok 方法对输入进行标记化。如果我输入 kill (PID),它会转到 killbyPIDprocess(ptr,pid) 方法,其中 ptr 是包含结构进程的所有指针的双指针。我在创建过程信息时存储过程信息。我在循环方法中打印的 pid 与我给它的输入相同,即我想通过 killbyPIDprocess 方法终止进程的那个 pid,但是当我通过 killbyPIDprocess 方法传递这个 pid 时,它显示了一些其他值。我还没有开始实际处理终止代码,因为它一直给我错误。我使用 print 语句来跟踪我的代码有多少在工作。我是 C 的新手,自学成才,所以请指出错误。
printf("%d\n",*p);
将为缓冲区中的第一个字符打印数字代码,因此您必须使用 %s
格式说明符 - printf("%s\n", p);
才能获得相同的结果。
此代码 if(strcmp(ptr[i]->pid,p)==0)
也不正确。 process::pid
成员有一个 pid_t
类型,它是一个带符号的整数。在字符串比较例程中使用它是未定义的行为(不确定它是否会编译)。要比较 PID,您必须将字符串数据转换为整数,例如使用 atoi
函数。然后您可以直接将它们与 ==
运算符进行比较。