当前位置:  技术问答>linux和unix

不知道进程的pid,如何向它发送一个信号?

    来源: 互联网  发布时间:2017-03-11

    本文导语:  参考书上都是这个方式给PID进程发信号, kill(PID,   SIGUSR1); 1)但是在系统运行中,如何获取这个pid(肯定不能手动敲ps吧?) 2)或者有没有其他的方法使得进程A向进程B发送SIGUSR1? 谢谢 | ...

参考书上都是这个方式给PID进程发信号,
kill(PID,   SIGUSR1);

1)但是在系统运行中,如何获取这个pid(肯定不能手动敲ps吧?)
2)或者有没有其他的方法使得进程A向进程B发送SIGUSR1?


谢谢

|
方法一
FILE *popen(const char *command, const char *type);
command字符串写ps -C PROCESS_NAME ,,,
然后解析下从FILE中读的字符就行了。

方法二
当然也可以用fork + pipe + execl + ps的方法重定向终端输出1
然后read pipe,解析字符串。得到pid.

方法三
system函数调用shell脚本 。这个简单,因为脚本解决字符方便。

方法四
参考ps的实现方法。 (这个我没看过ps源码,我猜应该是读取/proc中的文件和文件夹得到的,参见man 5 proc)
/proc目录下面的数字文件夹就表示每个进程的PID,,
/proc/$PID目录下cmdline文件存的就是他的参数,,文件里第一个参数就是指他的进程名了!
所以你只要写个函数然后遍历/proc/数字目录下的cmdline文件,读取第一个字符串,然后用basename函数取其进程名,,比较是否目标进程名,,若是则其对应的所在目录数字为其PID,,这样就可以调用kill了。

|
1,父子进程fork获得
2,无亲缘进程,预先约定写Pid文件
3,system执行killall, 其他类似方法都一样道理, 调shell即可

|
其实主要看你想发信号的进程是否是协作进程,即你是否能改变其源码或者你是否能让你的进程fork后exec产生。这种情况进程PID怎么都能获取了。
如果不是协作进程,,那你就只能通过各种方法根据进程名获取PID了。

|
自己写代码实现ps的功能,
遍历/proc下所有的文件,然后查询/proc/pid/comm 便知进程名, 如果匹配,则pid为进程pid
 

|
printf("pid = %dn",getpid());

|
楼主可以system直接调一条命令来干这事。
类似这样: kill   -9   `ps   -ef|grep   name|awk   '{print   $2} '`

|


是的, 这是很经典的做法, 开源软件的标准做法.

|
如果你能改目标进程程序的源码的话,,,那获得PID就很简单了,,写文件,socket(包括unix域),fifo等进程间通信都可以通知你的程序它的PID

不用改目标程序源文件的方法,用你的程序使用fork+exec,把目标程序包装下,,,,运行你的程序来启动目标程序,

    
 
 

您可能感兴趣的文章:

  • 已知一个进程的PID,但不知道这个进程是否停止,如何能知道系统中是否有相应的进程在运行。
  • 知道进程的ID,有什么函数知道这个进程还活不活?
  • 在程序中启动一个进程(不是线程),如何知道该进程已运行结束
  • 请问:如果知道一个进程的pid 怎么得到他父进程的pid
  • 只知道一个命令, 不知道其进程,问如何停止它?
  • 在进行多进程编程时,怎样才能知道系统管理员一共允许我同时起几个进程?
  • 请问知道进程标识,能够结束该进程并回收所有资源么?
  • 怎么查看Linux中所运行的进程,并且知道哪些是停止响应的,用什么命令可以杀掉停止响应的进程?
  • 怎么知道已经启动了的进程的ID?
  • 子进程怎么知道(判断)父进程被关闭了
  • 学了进程和线程但不知道应该在什么情况下用哪个
  • help help busy!!! 知道进程的ID号,在程序里如何检查这个进程还在不在?
  • 一用打印机。。system进程就占用cpu100%,大家知道是什么原因? 怎么解决?
  • 如何知道某个程序有多少个进程在运行?
  • POPEN后如何知道哪个是父进程执行的结果
  • 如何确定信号的来源?即如何知道接收到的信号来自于哪一个进程号?
  • 请问下如何知道进程有没有从内存读写数据?
  • Web服务器/前端 iis7站长之家
  • 如何知道一个进程打开了哪些文件?
  • 用什么命令可以知道哪个端口是有哪个进程打开的?
  • 不知道该怎样处理信号?请指教啊!
  • 请问如何知道一个数字对应的是什么信号
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 串口应用程序,当对方发送大量的数据时,本方的数据无法发出。对方停止发送,本方的数据仍然无法发出。不知道是什么原因。
  • 网络编程中:用SEND发包时,如何预先知道可用的发送缓冲区有多大?急!!!
  • sendmail配置好了,发送、接收都没有报错,问题是邮件不知道飞到哪里去了???
  • 自己最近在做一个简单的linux服务器小软件,不知道怎么向浏览器发送图片,求教
  • ★★★急问怎么才能知道一个webpage发送的request到底是POST型的还是GET型的?★★★
  • linux UDP 发送数据失败,不知道错在什么地方,请指教!!
  • 想要在linux下面写一个电子邮件sendmail下的发送程序,不知道怎么做,从何处入手.
  • 如何知道在linux下面如何知道mysql服务是用哪个端口啊
  • 那位知道怎样能知道 linux C/C++文件它所依赖的文件
  • 哪位大哥知道?我怎样知道LINUX redhat 7.2下声音设备由哪个应用程序占用?
  • 我做了个简单的留言板,不知道如何知道留言者的ip地址?
  • red hat linux 9.0安装问题,不知道有人知道吗?
  • 我插入USB设备,知道是1-1:1.0下面,如何知道ttyUSB?
  • UI小问题,可我就是不知道怎么实现,或许您知道……
  • 我在rh8下装了wine,可是我不知道装到哪里了,那位知道默认路径?
  • 请问如何在不知道对方IP,仅知道MAC地址的情况下和对方通信呢?
  • 不知道这个问题是否有人知道!
  • 在不知道表结构的前提下,怎样把该表的一条记录打印出来?(即不知道各字段类型时,用哪个方法?)
  • SUN OS5.8怎么没有make ,我想装APACHE2.0不知道怎么下手,原来的APACHE1.3有不知道怎么卸载
  • 要在arm开发板上实现DHCP+方式拨号上网,谁能给点下手的思路,知道不知道都给点意见吧?
  • 可信计算你知道嘛?红旗的可信计算你知道嘛?
  • 我装了jbuilder5,知道sn,但没有注册,每次启动都要跳出个jbuilder licence,要你注册,烦得很,那位大虾知道注册码,千万告诉小弟我,谢了
  • 我现在只有debian kernel 2.6,我把disc1的iso格式释放到了我的硬盘上面,我不知道里面有什么软件,也不知道怎样安装这些软件,莫展一筹
  • 一JSP网站,统一指定一个errorPage页面,统一处理异常,在指定的errorPage页面中,我想知道具体是哪个页面出错的,即想知道出错页面的具
  • 用JAVA过行无线网络编程,我现在只知道要用到J2ME,可其它就都不知道了,可不可以介绍一下
  • 菜鸟在c盘装了win2000,想在剩下的空间装Red Hat Enterprise Linux 3,在创建linux分区的时候,不知道都创建什么分区??我知道要创建一个
  • 我的一个问题,我不知道,你知道!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3