背景:
由于上个同事没有交接清楚,发现机器上有很多路径下含有nginx,系统service也配置了nginx,但是使用系统配置的service nginx status是stop状态,实际有nginx进程在执行,需要定位到该进程所启动的nginx位置。
解决方案:
1.先使用ps查询出nginx的进程号此处记为PID
2.使用ll /proc/PID
3.查看cwd或者exe后的 ->指向的路径就是该进程对应的应用程序路径
linux系统编译C++程序时头⽂件和库⽂件搜索路径C++编译时,教科书中写道:#include “headfile.h”优先在当前⽬录查找头⽂件;#include <headfile.h>从系统默认路径查找头⽂件。先
前以为系统默认路径是环境变量$PATH指定的路径,在系统上⼀查,傻了眼:
-bash-3.2$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp
全是bin⽬录,$PATH是运⾏可执⾏⽂件时的搜索路径,与include头⽂件的搜索路径⽆关,可能不少⼈犯了我这样的错误。
头⽂件:
1. #include“headfile.h”
搜索顺序为:
①先搜索当前⽬录
②然后搜索-I指定的⽬录
③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)
④最后搜索gcc的内定⽬录
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include
各⽬录存在相同⽂件时,先找到哪个使⽤哪个。
2. #include<headfile.h>
①先搜索-I指定的⽬录
②然后搜索gcc的环境变量CPLUS_INCLUDE_PATH
③最后搜索gcc的内定⽬录
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include
与上⾯的相同,各⽬录存在相同⽂件时,先找到哪个使⽤哪个。这⾥要注意,#include<>⽅式不会搜索当前⽬录!
这⾥要说下include的内定⽬录,它不是由$PATH环境变量指定的,⽽是由g++的配置prefix指定的(知道它在安装g++时可以指定,不知安
装后如何修改的,可能是修改配置⽂件,需要时再研究下):
-bash-3.2$ g++ -v
Using built-inspecs.
Target:x86_64-redhat-linux
Configured with:../configure --prefix=/usr --mandir=/usr/share/man--infodir=/usr/share/info --enable-shared --enable-threads=posix--enable-checking=release --with-system-zlib --enable-__cxa_atexit--disable-libunwind-exceptions --enable-libgcj-multifile--enable-languages=c,c++,objc,obj-c++,java,fortran,ada--enable-java-awt=gtk --disable-dssi --enable-plugin--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre--with-cpu=generic --host=x86_64-redhat-linux
Thread model:posix
gcc version 4.1.2 20080704(Red Hat 4.1.2-46)
在安装g++时,指定了prefix,那么内定搜索⽬录就是:
Prefix/include
Prefix/local/include
Prefix/lib/gcc/--host/--version/include
编译时可以通过-nostdinc++选项屏蔽对内定⽬录搜索头⽂件。
库⽂件:
编译的时候:
①gcc会去找-L
②再找gcc的环境变量LIBRARY_PATH
③再找内定⽬录/lib /usr/lib/usr/local/lib 这是当初compilegcc时写在程序内的(不可配置的?)
运⾏时动态库的搜索路径:
动态库的搜索路径搜索的先后顺序是:
①编译⽬标代码时指定的动态库搜索路径(这是通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间⽤冒号":"分隔)
②环境变量LD_LIBRARY_PATH指定的动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间⽤冒号":"分隔)
③配置⽂件/etc/ld.so.conf中指定的动态库搜索路径;
④默认的动态库搜索路径/lib;
⑤默认的动态库搜索路径/usr/lib。
(应注意动态库搜寻路径并不包括当前⽂件夹,所以当即使可执⾏⽂件和其所需的so⽂件在同⼀⽂件夹,也会出现找不到so的问题,类同#include<header_file>不搜索当前⽬录)
¥
5
百度文库VIP限时优惠现在开通,立享6亿+VIP内容
立即获取
linux系统编译C++程序时头文件和库文件搜索路径
linux系统编译C++程序时头⽂件和库⽂件搜索路径
C++编译时,教科书中写道:#include “headfile.h”优先在当前⽬录查找头⽂件;#include <headfile.h>从系统默认路径查找头⽂件。先
前以为系统默认路径是环境变量$PATH指定的路径,在系统上⼀查,傻了眼:
-bash-3.2$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp
第 1 页
全是bin⽬录,$PATH是运⾏可执⾏⽂件时的搜索路径,与include头⽂件的搜索路径⽆关,可能不少⼈犯了我这样的错误。
头⽂件:
1. #include“headfile.h”
搜索顺序为:
①先搜索当前⽬录
②然后搜索-I指定的⽬录
③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)
展开全文
限免
导长图
转存到网盘
发送至微信
下载文档
北京百度网讯科技有限公司 版本号8.0.70
root 3843 3598 0 00:08 pts/000:00:00 grep --color=auto fcitx1.作用
kill命令用来中止一个进程。
2.格式
kill [ -s signal | -p ] [ -a ] pid …
kill -l [ signal ]
3.参数
-s:指定发送的信号。
-p:模拟发送信号。
-l:指定信号的名称列表。
pid:要中止进程的ID号。
Signal:表示信号。
4.说明
进程是Linux系统中一个非常重要的概念。Linux是一个多任务的 *** 作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或 者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。
Linux *** 作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也 可以在后台运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护进程)时Linux系统启动时启动的进程,并在后台运行。例 如,httpd是著名的Apache服务器的监控进程。
kill命令的工作原理是,向Linux系统的内核发送一个系统 *** 作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行 *** 作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。系统多个虚拟控制台的作用是当一个程序出错造成 系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。
5.应用实例
(1)强行中止(经常使用杀掉)一个进程标识号为324的进程:
#kill -9 324
(2)解除Linux系统的死锁
在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机, 只需要中止(或者说是关闭)这个有问题的程序即 可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如, 如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用top命令查处该程序的 PID,然后使用kill命令停止这个程序:
#kill -SIGKILL XXX
其中,XXX是包含有Mozolla浏览器的程序的进程标识号。
(3)使用命令回收内存
我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用 top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令:
#kill -9 XXX
其中,XXX是无用的进程标识号。
然后使用下面命令:
#free
此时会发现可用内存容量增加了。
(4)killall命令
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:
# killall -HUP inetd
*杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。
首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令:
# kill -pid
注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在 运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。
——————————————————————————–
*确定要杀死进程的PID或PPID
# ps -ef | grep httpd
——————————————————————————–
*以优雅的方式结束进程
# kill -l PID
-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总 能成功–或许仍然需要先手工杀死子进程,然后再杀死父进程。
——————————————————————————–
*TERM信号
给父进程发送一个TERM信号,试图杀死它和它的子进程。
# kill -TERM PPID
——————————————————————————–
*killall命令
killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。
# killall httpd
——————————————————————————–
*停止和重启进程
有时候只想简单的停止和重启进程。如下:
# kill -HUP PID
该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命 令。
——————————————————————————–
*绝杀 kill -9 PID
同意的 kill -s SIGKILL
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无 效。
当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。
如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)