草庐IT

posix_kill

全部标签

linux - 语言环境如何在 Linux/POSIX 中工作以及应用了哪些转换?

我正在处理大量(我希望)UTF-8文本文件。我可以使用Ubuntu13.10(3.11.0-14-generic)和12.04重现它。在调查错误时我遇到了奇怪的行为$exportLC_ALL=en_US.UTF-8$sortpart-r-00000|uniq-dɥɨɞɧ251ɨɡɞɭɯ291ɢɫɬɜ301ɪɳ475ʈʂ565$exportLC_ALL=C$sortpart-r-00000|uniq-d$#noduplicatesfound当运行使用std::stringstream读取文件的自定义C++程序时,重复项也会出现-当使用en_US.UTF-8语言环境。C++似乎至少对于st

c - KILL 信号是否立即退出进程?

我正在编写使用fork()和exec创建子进程的服务器代码。child的PID在fork()成功时注册,并在CHILD信号被捕获时清除。如果服务器需要停止,所有程序都会被终止,最终会发出KILL信号。现在,这是通过遍历所有已注册的PID并等待CHILD信号处理程序删除PID来实现的。如果子程序没有正确退出,这将失败。因此,我想将kill与waitpid结合使用,以确保清理PID列表并记录并做一些其他事情。考虑下一个代码示例:kill(pid,SIGKILL);waitpid(pid,NULL,WNOHANG);摘自waitpid(2):waitpid():onsuccess,retur

c - 如何使用 POSIX 线程在 C 语言中创建特定于线程的全局变量?

我正在学习POSIX线程,我来到了有关线程特定数据的部分。这本书使用文件描述符做了一个很好的例子。但是,我想自己做同样的例子,除了这次使用全局变量。但是,我在完全掌握这个概念时遇到了一些困难。我想做的是:创建一个全局整数为全局int声明一个键主要是:将全局整数设置为一个值,例如。10在不进行任何清理的情况下为其创建key创建4个线程并发送给它们执行thread_func检查值是否仍然是10,因为线程只能看到它的一个副本在thread_func中:使用pthread_setspecific(key,globalvariable)创建本地实例-不确定我是否正确解释了这一点调用函数-doso

c - posix 管道是轻量级的吗?

在linux应用程序中,我使用管道在线程之间传递信息。使用管道背后的想法是我可以使用poll(2)一次等待多个管道。这在实践中效果很好,而且我的线程大部分时间都在休眠。他们只有在有事可做时才会醒来。在用户空间中,管道看起来就像两个文件句柄。现在我想知道这样的管道在操作系统端使用了多少资源。顺便说一句:在我的应用程序中,我偶尔只发送单个字节。将我的管道想象成简单的消息队列,允许我唤醒接收线程,告诉它们发送一些状态数据或终止。 最佳答案 不,我不会认为管道是“轻量级的”,但这并不一定意味着它们对您的应用来说也是错误的答案。通过管道发送一

c - 了解 POSIX 和 Linux/glibc sched_* 函数之间的差异

POSIXXSH2.8.4ProcessScheduling定义线程和进程的调度属性的行为。sched_*接口(interface)被指定为影响进程的调度属性,而不是线程。以下段落阐明了这一点:ThePOSIXmodeltreatsa"process"asanaggregationofsystemresources,includingoneormorethreadsthatmaybescheduledbytheoperatingsystemontheprocessor(s)itcontrols.Althoughaprocesshasitsownsetofschedulingattrib

c - 如果 posix 关闭调用失败怎么办?

在我的系统(UbuntuLinux、glibc)上,close调用的手册页指定了它可以返回的几个错误返回值。它还说Notcheckingthereturnvalueofclose()isacommonbutneverthelessseriousprogrammingerror.同时Notethatthereturnvalueshouldonlybeusedfordiagnostics.Inparticularclose()shouldnotberetriedafteranEINTRsincethismaycauseareuseddescriptorfromanotherthreadto

java - Hadoop 映射器因 "Container killed by the ApplicationMaster"而失败

我正在尝试在Hadoop上执行mapreduce程序。当我将作业提交到hadoop单节点集群时。正在创建作业,但失败并显示消息“容器被ApplicationMaster杀死”使用的输入大小为10MB。当我使用输入文件400KB的相同脚本时,它成功了。但是对于大小为10MB的输入文件失败。我的终端显示的完整日志如下。15/05/2909:52:16WARNutil.NativeCodeLoader:Unableto`loadnative-hadooplibraryforyourplatform...usingbuiltin-javaclasseswhereapplicableSubmit

c - realloc 是否保持 posix_memalign 的内存对齐?

对齐的malloc是posix_memalign,没问题,但是对齐的realloc呢?realloc是否保留对齐方式或如何确保重新分配的内存具有相同的对齐方式?假设Linux和x86_64。 最佳答案 不,ISO或POSIX不保证从posix_memalign返回的内存上的realloc保持相同的对齐。realloc可能只是在同一地址扩展当前block,但它也可能将block移动到对齐不如原始地址严格的不同地址。如果您想要相同的对齐方式,最好分配另一个block并将数据复制过来。不幸的是,单一UNIX规范中也没有posix_mema

linux - kill一个进程,等待进程退出

当我从我的bash脚本启动我的tcp服务器时,我需要在当前实例开始监听之前终止前一个实例(它可能仍在监听同一个端口)。我可以使用类似pkill的东西.如果我理解正确的话,这只是发送SIGTERM到目标pid。当pkill返回,目标进程可能仍然存在。有没有办法让pkill等到它退出? 最佳答案 没有。您可以做的是使用kill-0$PID编写一个循环。如果此调用失败($?-ne0),则进程已终止(在您正常的kill之后):whilekill-0$PID;dosleep1done(感谢qbolec的代码)相关:Whatdoes`kill-

c - POSIX API 调用以列出进程中运行的所有 pthreads

我在POSIX/Linux环境中有一个多线程应用程序-我无法控制创建pthreads的代码。在某个时候,进程(pthreads的所有者)收到一个信号。该信号的处理程序应该中止、取消或停止所有pthreads并记录有多少pthreads正在运行。我的问题是我找不到如何列出进程中运行的所有pthreads的方法。 最佳答案 似乎没有任何可移植的方法来枚举进程中的线程。Linux有pthread_kill_other_threads_np,它看起来像是原始的纯用户态pthreads实现的遗留物,可能会也可能不会像今天记录的那样工作。它不会