Articles of 进程

ps和ps -e命令在linux中有什么区别?

ps和ps -e命令在linux中有什么区别? ps -e给出一个更长的列表。

init的僵尸小孩

僵尸进程如何成为init的孩子? 所有的孩子都不应该等待吗? 我偶尔遇到僵尸进程的父母是初始化。 该理论认为,当进程死亡时,它一直是僵尸,直到它的父母等待或waitpid的。 如果父母死了,那么init会采用这个过程,然后等待。 我正在看这样的过程。 我用strace附加到init。 我确实看到init在一会儿醒来,waitpid在其subprocess中。 但是我确实看到它跳过了它的僵尸孩子。 我想知道这是如何可能的。 有任何想法吗?

将SIGINT信号委派给subprocess,然后清理并终止父进程

我有一个主python(testmain.py)脚本,使用subprocess.Popen命令执行另一个python脚本(test.py)。 当我按下Ctrl-C时,我希望孩子退出退出代码2,然后父母显示退出代码,然后终止。 我有父和子脚本中的信号处理程序。 testmain.py def signal_handler(signal, frame): print "outer signal handler" exit(2) signal.signal(signal.SIGINT, signal_handler) def execute() proc=subprocess.Popen("python test.py",shell=True) streamdata=proc.communicate()[0] rc=proc.returncode print "return code:",rc execute() test.py def signal_handler(signal, frame): print "exiting: inner function" exit(2) signal.signal(signal.SIGINT, signal_handler) 我检查委托信号处理到Python中的一个subprocess是有点类似于我的问题,但在这种情况下,父母继续它的执行,我不想要的。 我想要:1.退出test.py退出(2)2.print退出代码在testmain.py 3.退出test.py退出(2) 有人可以提供build议吗? 谢谢。 更新:处理信号只在子(test.py)和检查父母(testmain.py)中的返回代码将做我想要的。 if rc==2: print "child was terminated" exit(2) 但我想知道是否有一个干净的方式来做到这一点使用信号处理。

在Linux服务器后台运行PHP文件进行推送通知

我试图在Linux服务器上用后台执行一个PHP文件,并在博客上find一个很酷的脚本: NAME=servicename DESC="Daemon for my magnificent PHP CLI script" DAEMON="/usr/bin/php" DAEMON_OPTS="/var/www/html/phpscript.php" test -x $DAEMON || exit 0 set -e case "$1" in start) echo -n "Starting ${DESC}: " nohup php $DAEMON_OPTS & ;; stop) ps faux | grep php echo -n "Can't Stop process, use kill -9 pid" ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop}" […]

父进程在继续之前等待所有subprocess完成

我希望我的父进程在继续之前等待所有的subprocess完成,我有一个解决scheme。 int status; pid_t pid = 0; int num = 0; for (int i = 0; i < NUMBER_OF_PROCESSES; i++) { pid = fork(); if (pid == 0) { //printf("Hello from Child\n"); sleep(5 – i); printf("Hello from Child %d\n",i + 1); num++; return 0; } else if (pid) { waitpid(pid, &status, 0); continue; } else […]

如何比较string中的字符与NASM x86_64 Linux程序集中的另一个字符

实际上,我试图理解英特尔x64语法中的NASM汇编的基本概念,但在尝试创build相当于strchr的同时面临一个问题。 我一直在航行networking获取最大的信息,但我不明白如何比较当前string(如str [我])与一个简单的字符。 这里是testing主要: #include <stdio.h> extern char* my_strchr(char*, char); int main(void) { char* str; str = my_strchr("foobar", 'b'); printf("%s\n", str); return 0; } 这里是我的汇编代码: 我假设rdi是我的string,rsi是我的单字节数据。 my_strchr: push rcx ;Save our counter xor rcx, rcx ;Set it to 0 loop: cmp rdi, byte 0 ;Check the end of string jz end cmp rsi, [byte rdi+rcx] […]

再养育停止的过程

停止的过程如何重新养育? 为什么停止的过程在重新养育之后才终止? 更确切地说,假设我有这样的代码 #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <sys/user.h> #include <sys/syscall.h> #include <stdio.h> int main(void) { pid_t child; child = fork(); if (child == 0) { int t = 0; while (true) { printf("%d. I'm %d, my parent is %d\n", t++, getpid(), getppid()); sleep(1); } } else { printf("I'm the parent. My pid […]

在python中保护孩子与父母的沟通

我的python程序需要提升的特权,因此由root(用setuid-binary-wrapper)启动。 为了保持攻击面(以及编码错误的影响)尽可能小, 我决定将我的代码分成两部分:一部分是以root身份执行,另一部分是以regular user权限执行。 问题是代码是相互依赖的,因此需要secure two-way communication 。 我不知道这是否是正确的方法(其他想法是受欢迎的),但是我决定使用two processes – 一个具有提升特权的父进程和一个具有普通用户特权的subprocess。 这个想法: 父进程由root启动并保留其权限 父进程产生一个subprocess,这个subprocess会丢弃给一个普通用户(subprocess不能重新获得root权限) subprocess完成大部分的工作,但是如果需要执行一些具有根权限的东西,它会告诉父进程为它做这件事 问题: subprocess进程(.Popen)足够吗? multiprocessing会更适合吗? subprocess和父进程如何以交互和安全的方式进行通信(subprocesssubprocess.PIPE是否安全)? 你知道这个场景的任何简单的代码示例吗? ————————————————– ———————– 根据吉尔汉密尔顿的build议,我提出了下面的代码 还有一些问题: 这是安全的吗? 我是否需要放弃像文件描述符或os.setuid(<unprivileged UID>)足够的东西? 一般来说,如果一个进程下降到这样一个特定的用户,这个用户是否能够干涉被丢弃的进程内存? privileged.py : #!/bin/python from multiprocessing import Process, Pipe from unprivileged import Unprivileged if __name__ == '__main__': privilegedProcessPipeEnd, unprivilegedProcessPipeEnd = Pipe() unprivilegedProcess = Process(target=Unprivileged(unprivilegedProcessPipeEnd).operate) unprivilegedProcess.start() print(privilegedProcessPipeEnd.recv()) privilegedProcessPipeEnd.send("ok") […]

关于JVM信号处理

我想禁用像CTRL_C发送的SIGINT信号,以及其他会终止JVM的信号。 我在这里阅读关于-Xrs选项 http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html?cm_mc_uid=30731201786714525992590&cm_mc_sid_50200000=1461656557 但是它似乎对JVM /进程终止没有影响。 我启动了程序jar,像java -Xrs -jar avoid-signals.jar 。 我在Linux上。 有什么build议么?

如何检查死亡后的进程状态,或甚至可能?

我有一个应用程序,我故意引入空指针exception。 我将用一个代码示例来解释如下: // access modifiers omitted for brevity class MyApplication extends Application { String name; String getName() { return name; } void setName(String name) { this.name = name; } } // ==================================== // access modifiers omitted for brevity class WhatIsYourNameActivity extends Activity { void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.writing); // Just assume that in the […]