Articles of 进程

Linux的C + +:是否从main()返回导致multithreading应用程序终止?

这个问题似乎可能是重复的,但我无法find一个。 如果我错过了以前的问题,道歉。 在Java中,我有大部分经验,如果你的main()分支了一个线程,并立即返回,那么进程将继续运行,直到进程中的所有(非守护进程)线程都停止。 在C ++中,看起来并不是这样 – 一旦主线程返回进程正在终止,其他线程仍在运行。 对于我目前的应用程序,这是很容易解决与pthread_join()的应用程序,但我想知道是什么原因导致此行为。 这个编译器(gcc)是特定的,pthreads特定的,还是在C ++已经实现的大多数/所有平台上共享的一种行为? 这种行为是可以在pthreads中configuration的(我已经通过pthread_attr_*()函数的pthread api查看过,没有看到任何相关的东西。 完全独立的问题,但是当你在这里…什么人会使用pthread_detatch()的?

查看linux中已经运行的进程的输出

我有一个在后台运行的进程(sh脚本),我不知道是否有可能查看这个进程的输出,而不必中断它。 这个过程由一些应用程序运行,否则我会把它附加到屏幕上供以后查看。 这可能需要一个小时才能完成,我想确保它正常运行,没有错误。

bash fork错误(资源暂时不可用)不会停止,并且每次尝试终止/重新启动时都会一直显示

我错误地将有限的服务器用作5000并行连接的iperf服务器。 (限制为1024个进程)现在,每次login时,都会看到: -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: Resource temporarily unavailable 然后,我试图杀死他们,但是当我做ps时,我得到这个: -bash-4.1$ ps -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: […]

在Java中处理内存不足的最佳方式是什么?

我们有一个应用程序,它产生新的JVM并代表我们的用户执行代码。 有时那些内存不足,在这种情况下,行为方式非常不同。 有时他们抛出一个OutOfMemoryError,有时会冻结。 我可以通过一个非常轻量级的后台线程来检测后者,在内存不足时发送心跳信号。 在这种情况下,我们杀死了JVM,但是我们永远无法确定没有收到心跳的真正原因是什么。 (这也可能是networking问题或分段错误。) 在JVM中可靠地检测到内存不足的最佳方法是什么? 从理论上讲,-XX:OnOutOfMemoryError选项看上去很有希望,但是由于这个bug,它是无效的: https ://bugs.openjdk.java.net/browse/JDK-8027434 捕捉OutOfMemoryError实际上不是一个很好的select,因为众所周知的原因(例如,你永远不知道它发生在哪里),虽然它在许多情况下工作。 剩下的情况是那些JVM冻结并且不会抛出OutOfMemoryError的情况。 我仍然确定内存是这个问题的原因。 有任何替代scheme或解决方法? 垃圾收集设置使JVM自行终止而不是冻结? 编辑:我完全控制分叉和分叉的JVM以及在那些内部执行的代码,两者都在Linux上运行,如果有帮助,可以使用特定于操作系统的实用程序。

Bash:当子脚本捕获SIGINT时,为什么父脚本不能在SIGINT上终止?

script1.sh: #!/bin/bash ./script2.sh echo after-script script2.sh: #!/bin/bash function handler { exit 130 } trap handler SIGINT while true; do true; done 当我从terminal启动script1.sh,然后使用Ctrl + C向其进程组发送SIGINT时,信号被script2.sh捕获,当script2.sh终止时,script1.sh打印“after-script”。 不过,我希望script1.sh在调用script2.sh的行之后立即终止。 为什么在这个例子中不是这种情况? 补充说明(编辑): 由于script1.sh和script2.sh在同一个进程组中,因此在命令行上按Ctrl + C时,SIGINT将发送到两个脚本。 这就是为什么当script2.sh退出时,我不希望script1.sh继续。 当script2.sh中的“trap handler SIGINT”行被注释掉时,script2.sh会在script2.sh存在后立即退出。 我想知道为什么它的行为有所不同,因为script2.sh然后生成相同的退出代码(130)。

杀害分叉的孩子杀害父母?

我进入了这个奇怪的行为,我有我的主要程序和分叉的孩子。 他们这样pipe道(数字是文件描述符): ___parent___ | | ____child_____ | 0 stdin | | | | 1 pipe1[1]———-. | 1 stdout | | 2 pipe2[1]———-.\ | 2 stderr | |____________| \`———-> 3 pipe1[0] | `———-> 5 pipe2[0] | |______________| 所以父母从标准input获得input,但redirect标准输出和标准错误到两个pipe道。 孩子已经closures了stdin,并使用pipe道的读取结束。 然后我有一个杀死孩子的function: void killChild(){ printf("Killing %d\n", (int)childID); fflush(stdout); kill(childID, SIGKILL); waitpid(childID, NULL, 0); // getting rid of the […]

将其放入后台后,请转到Linux上正在运行的进程

我已经产生了另一个应用程序的进程。 我可以看到它正在运行: ps -ef 我怎样才能切换到这个过程,就像我自己手动启动它一样,把命令input到控制台中?

在远程服务器上部署,启动和停止Scala应用程序

在远程Linux服务器上部署Scala应用程序的首选方法是什么? 这是在远程服务器上部署Scala应用程序的一种相当简单而有限的方式(很适合快速testing不太敏感的项目): 从远程服务器,我从git拉我的来源 使用sbt-assembly插件,我在服务器上构build一个jar 然后我使用nohup运行Scala应用程序,它允许您退出远程会话而不终止进程: nohup java -jar myapp.jar> myapp.log 2> myapp.err </ dev / null& 首先,考虑到正在使用数据库等资源,停止进程的最佳方法是什么?我只是查找java进程ID并将其加以核实? 其次,在重新启动时自动启动Java应用程序的最佳方法是什么? 我记得过去使用过init.d,但是记得自从它是一个Java应用程序以来就有些艰难。 更新: 我错过了这里的房间里的大象。 我使用喷雾库,反过来使用阿卡,所以提供了一些有趣的选项。

gcc:在32位平台上编译一个64位的二进制文件

是否有可能使用gcc在32位Linux平台上编译64位二进制文​​件?

共享库如何在混合的64位/ 32位系统中工作?

早上好, 在一个64位的RedHat盒子上,我们必须编译并运行一个32位应用程序。 同时,我设法编译所需的gcc版本(4.0.3)和所有需要的运行时库在32位,并已设置LD_LIBRARY_PATH指向32位版本,但现在在剩余的构build过程中,需要执行一个小型的java程序作为64位程序安装在/ usr / bin中,现在可以先findlibgcc_s.so的32位版本。 一般来说,如果我将LD_LIBRARY_PATH设置为32位版本,则会打破64位程序,反之亦然。 这应该如何工作呢? 我确信我不是第一个有这个问题的人。 通常如何解决? 问候,斯蒂芬