【Linux系统编程14_信号和进程状态】教程文章相关的互联网学习教程文章

在32位和64位Linux上,为什么同一进程的pmap的内存使用量会有很大差异?【代码】

我正在设置一台新服务器(64位Debian),并试图使apache进程尽可能小,从而禁用了我不需要的任何模块.然后,我将pmap输出与32位Debian机器上的apache进行了比较,并打开了更多模块.我很惊讶地看到64位计算机上的“优化”磁盘似乎正在消耗更多的内存. pmap -d(仅是摘要行)显示:64bit: mapped: 188584K writeable/private: 14680K shared: 72K32bit: mapped: 33824K writeable/private: 7304K shared: 888K仔细观察输出.我看到...

linux-为什么wineserver在后台运行时在子进程中设置主套接字?【代码】

Wine服务器启动时,它将通过open_master_socket()创建一个Unix套接字,稍后启动的所有Wine进程都使用此套接字连接到Wine服务器,这是来自server / request.c,open_master_socket()的代码:771 if (!foreground)772 {773 if (pipe( sync_pipe ) == -1) fatal_perror( "pipe" );774 pid = fork();775 switch( pid )776 {777 case 0: /* child */778 setsid();779 ...

linux-父/子进程关闭文件描述符

如果对父项执行fork()并创建子进程,则子项将关闭从fork继承的fd. 由于文件是独立的,文件会在父文件中保持打开状态吗?什么标准I / O或标准错误?解决方法:无论它们代表文件还是设备(包括标准I / O描述符),如果您在一个进程中关闭,则另一个进程仍然具有有效的描述符. 这很自然.如果子进程意外崩溃,则当通过任何先前打开的描述符检测到父进程时,父进程甚至将很难记录该事实,因为所有形式的进程出口都涉及到所有打开的描述符的关闭.

linux上进程的一些问题【代码】【图】

main进程终止:图片来自linux环境高级编程150页 1 #include<cstdlib> 2 #include<cstdio> 3 4 static void my_exit1(void) 5 { ...

linux进程后台运行 nohup和&【代码】

go编译的程序,要求后台持续运行了解到一种方法,即使用nohup配合&来实现当然还有别的实现方法,暂时先使用这种方式 nohup帮助文档12345# nohup --helpUsage: nohup COMMAND [ARG]... or: nohup OPTIO 大专栏 linux进程后台运行 nohup和&NRun COMMAND, ignoring hangup signals.... 就是运行指定的命令,然后忽略挂起信号程序的终端输出也不会显示,所以有需求的话,应当使用>nohup默认不会后台运行&放在启动参数后面表示设置此...

linux-是否可以在shell脚本中创建非子进程?【代码】

我在Github使用shell process pool API作为脚本,如下function foobar(){mytask($1);}job_pool_init 100 0tcpdump -i eth0 -w tempcap & #for i in `seq 1 4`;domesg="hello"$ijob_pool_run foobar $mesgsleep 5donejob_pool_waitpkill tcpdump #echo 'all finish'job_pool_shutdown如果我评论tcpdump行,然后按预期工作,但是当tcpdump行在那里时,job_pool_wait中有一条等待命令,该命令等待所有...

linux-bash中的进程替换,有时我必须按“ Enter”【代码】

我只是在学习在bash中使用流程替换.这是命令:echo TEXT > >(tee log)这是没有意义的命令,但问题是我必须在运行它后按Enter.这是为什么? 有时,这会通过更有用的命令发生,例如:ls SOME_NON_EXISTING_FILE 2> >(tee log)解决方法:实际上实际上并不需要Enter,您只需输入下一个命令,例如日期和检查.发生的情况是,由于进程替换,您的命令首先退出,然后输出输出到您的终端上,这就是您误认为需要按Enter的原因.

linux-连接到用于stdout和stderr的单独的pty的进程【代码】

我正在写一个terminal logging program-想想脚本命令,但是功能更多一些.差异之一是,尽管脚本将stdout,stdin和stderr捕获为一个大字符流,但我想将它们分开并记录下来. 为此,我使用运行连接到pty的子shell的标准方法,但不是使用单个pty与stdin,stdout和stderr都连接到它,而是使用两个pty-将stdin和stderr连接到一个pty,另一个则是stdout.这样,主进程可以分辨出来自stdout的东西和来自stderr的东西. 到目前为止,这种方法运行良好.但是...

如何在BASH中使用新的进程组ID在Linux上生成进程【代码】

任何人都可以提出建议,如何在BASH unix shell中使用新的进程组ID在Linux上生成新进程?非常感谢!解决方法:要在新进程组中从命令提示符下(例如以交互方式)运行命令,例如“ emacs xxx.txt”:setsid emacs xxx.txt &如链接的“ linux命令setsid”中所述,setsid命令的行为可能令人惊讶(并且在我现在使用的linux中,联机帮助页根本没有帮助).所以… 如果要从脚本中生成命令并在脚本退出后继续执行该命令,请对setsid进行两次设置:setsi...

Linux,waitpid,WNOHANG,子进程,僵尸【代码】

我将程序作为守护程序运行. 父进程仅等待子进程,当它意外死亡时,请分叉并再次等待.for (; 1;) {if (fork() == 0) break;int sig = 0;for (; 1; usleep(10000)) {pid_t wpid = waitpid(g->pid[1], &sig, WNOHANG);if (wpid > 0) break;if (wpid < 0) print("wait error: %s\n", strerror(errno));} }但是当子进程被-9信号杀死时,子进程进入僵尸进程. waitpid应该立即返回子进程的pid!但是waitpid在大约90秒后获得了pid号码,cube ...

如何持续监控Linux中的进程创建?

我的流程启动了一个流程-在此示例中将其作为外壳,但实际上它适用于任何流程.当Shell创建新进程并获取其PID时,我需要得到通知. 我可以在任何给定时间拍摄整个流程树的快照(好吧,pstree可以),但是如何监视具有给定PID的流程对新流程的创建? 到目前为止,我已经找到了几种方法可以在How to monitor an external process for events by its PID in C?做到这一点,但没有一种能真正解决我的问题: >监视NetLink proc接口.问题:需要我没有...

linux-如何正确启动将使用Go进行守护进程的进程?【代码】

我编写了Go程序,它将运行另一个守护程序. 我想知道第一个程序在其子进程守护之前必须等待多少时间.cmd := exec.Command(path1) cmd.Start()// exit here要么cmd := exec.Command(path1) cmd.Run()// exit here要么cmd := exec.Command(path1) cmd.Start() time.Sleep(5 * time.Second)// exit here如果使用cmd.Run(),则启动的守护程序中的命令/操作将在第一个程序中“等待”结束.解决方法:守护进程是just a fancy way of forking t...

linux-如何查看哪个CPU上正在运行哪些进程?【代码】

我有一个多线程c编程,并使用cpu亲和力将不同的不同线程锁定到不同的cpus中. 但是,如何检查哪个进程在哪个CPU上运行? 通过“顶部”,我只能看到那些过程.就像PID xxxx在CPU 5上运行一样 谢谢解决方法:在Linux上,您可以在proc文件系统中找到此信息.对于每个线程,文件系统中都有一个具有以下名称的文件:/proc/<pid>/task/<tid>/stat第39列包含线程最后执行的CPU编号.有关更多信息,请参见以下手册页: > http://linux.die.net/man/5/p...

c-检测Linux下64位环境中是否正在运行32位进程

我正在分发一个软件的32位版本.我想在运行时检测它所运行的userland是否为64位,并且能够运行64位可执行二进制文件(ELF 64位x86-64). 这与在编译时检测体系结构是32位还是64位不同. 理想情况下,我希望以最可移植的方式执行此操作,因此希望避免执行文件$(which init)| grep x86-64取决于 我也不认为读取cpuid也是一种解决方案-可能在64位CPU上运行32位OS. 检测以长模式运行的64位cpu似乎也不是解决方案,也不检测内核本身是否为64位,因...

linux-两个不同进程的两个相同的线性地址?

大家好, 我是Linux内核的新手,我现在指的是《了解Linux内核》一书.我读到了有关内存管理的知识,其中关于分页和分段的所有知识都很好,但我的问题尚未得到解答. 如果两个不同的进程具有相同的线性地址,那么它们在物理地址中是否可以位于不同的位置,因为每个CPU只有一个全局页面目录,通过观察32位的线性地址将其再次映射到物理地址,但是两个进程如何记忆体最大为4GB.请解释.解决方法:是的,两个不同的进程都可以使用相同的线...