当前位置: 技术问答>linux和unix
怎么样在进程A中关闭进程B?
来源: 互联网 发布时间:2015-11-29
本文导语: 我想做到运行进程A时先关掉进程B,再执行进程A,应该怎么做?请讲得具体一些,谢谢! | 写一个脚本. #! /bin/sh killall -9 B PATH/A | 首先,你需要知道进程b的pid号,然后,使用...
我想做到运行进程A时先关掉进程B,再执行进程A,应该怎么做?请讲得具体一些,谢谢!
|
写一个脚本.
#! /bin/sh
killall -9 B
PATH/A
#! /bin/sh
killall -9 B
PATH/A
|
首先,你需要知道进程b的pid号,然后,使用kill()系统调用向b发送sigkill信号。使用方法如下:
kill(pid,SIGKILL),此函数可以中止进程号为pid的运行进程。但是你编写的程序必须具有root权限才可以调用此kill函数,因为在kill函数中会检查你的权限是否可以关闭一个进程。另外;若不是关闭父进程所产生的子进程,那么还做的起码工作是找到进程b,这与具体的进程b有关系。根据进程b大概可以找到多种得到其pid的方法。
kill(pid,SIGKILL),此函数可以中止进程号为pid的运行进程。但是你编写的程序必须具有root权限才可以调用此kill函数,因为在kill函数中会检查你的权限是否可以关闭一个进程。另外;若不是关闭父进程所产生的子进程,那么还做的起码工作是找到进程b,这与具体的进程b有关系。根据进程b大概可以找到多种得到其pid的方法。
|
void readSysProc(void)
{
char* procName;
proc_t p;
DIR* dir;
struct dirent* entry;
char path[32],sbuf[512];
int i=0;
SysProcNum=0; /* first set zero,this is very important!*/
if((dir=opendir("/proc"))==NULL)
{
mysyslog(LOG_ERR,"open directory /proc error!");
exit(0);
}
while((entry=readdir(dir))!=NULL)
{
if(!isdigit(*entry->d_name))
continue;
sprintf(path,"/proc/%s/status",entry->d_name);
if((file2str(path,sbuf,sizeof sbuf))!=-1)
{
parse_proc_status(sbuf,&p);
SysProc[i]=p;
i++;
SysProcNum++;
}
}
closedir(dir);
}
读取/proc/pid/status
中的name属性盘是不是本程序
使用kill()系统调用
{
char* procName;
proc_t p;
DIR* dir;
struct dirent* entry;
char path[32],sbuf[512];
int i=0;
SysProcNum=0; /* first set zero,this is very important!*/
if((dir=opendir("/proc"))==NULL)
{
mysyslog(LOG_ERR,"open directory /proc error!");
exit(0);
}
while((entry=readdir(dir))!=NULL)
{
if(!isdigit(*entry->d_name))
continue;
sprintf(path,"/proc/%s/status",entry->d_name);
if((file2str(path,sbuf,sizeof sbuf))!=-1)
{
parse_proc_status(sbuf,&p);
SysProc[i]=p;
i++;
SysProcNum++;
}
}
closedir(dir);
}
读取/proc/pid/status
中的name属性盘是不是本程序
使用kill()系统调用
|
可以把用B的进程号做一个文件,让A去找,得到B的进程号
然后kill发信号
然后kill发信号
|
kill 函数调用,向相关的进程发送信号
|
直接system调用:system(ps -ef |grep B|grep `id -un`|grep -v grep|awk '{print "kill -9 " $2}'|/bin/sh)