Articles of 进程

Linux线程和进程 – CPU亲和力

我有几个与线程和进程调度有关的查询。 当我的进程进入hibernate状态并唤醒时,是否总是将它安排在与之前预定的CPU相同的CPU上? 当我从这个进程创build一个线程时,它是否也会一直在同一个CPU上执行? 即使其他CPU是空闲和睡眠。 我想知道在Linux中的具体机制。 另外我通过pthread库创build线程。 我面临一个始终不可重现的随机挂断问题。 需要这些信息才能朝着正确的方向前进。

代码(与叉)不应循环循环

所以我有以下的C代码: #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(){ int i = 0, n; n = 5; pid_t pid; printf("i=%d Right before the loop\n", i, getpid(), getppid()); for (i = 0; i < n; i++){ pid = fork(); if (pid <= 0){ printf("something happens in loop #%d. pid = %d\n", i, pid); break; } printf("End […]

是否有可能从bash脚本中设置超时?

有时候我的bash脚本没有明确的理由挂起来 所以他们实际上可以永远挂起(脚本进程将运行,直到我杀了它) 例如半小时之后,是否可以在bash脚本超时机制中结合以退出程序?

如何在Linux中find属于同一进程的线程

由于在Linux中为每个线程分配了task_struct ,所以如何find属于同一进程的线程呢? 所以,这是一个普遍的问题。 详细说,我需要编写一个内核函数来遍历属于一个进程(p)的线程,给它一个指向task_struct或者pid的指针,并且对它们做一些事情(比如收集一些信息)。

fork()的function

系统信息:我在2个月的笔记本电脑上运行64位Ubuntu 10.10。 大家好,我有一个关于在C fork()的fork()函数的问题。从我使用的资源(Stevens / Rago,YoLinux和Opengroup),我的理解是,当你fork一个进程时,子从下一个命令继续执行。 由于fork()返回0给孩子,孩子的父进程ID可以用两个if语句分开, if(pid == 0)假设你用pid = fork()分叉。 现在,我正在发生最奇怪的事情。 在我的主要function的开始,我正在打印stdout已分配给variables的几个命令行参数。 这是整个程序中的第一个非赋值语句,但是,似乎每次在程序中稍后调用fork时,都会执行这些打印语句。 我的程序的目标是创build一个“进程树”,每个进程有两个subprocess,深度为3,从而创build最初可执行文件的总共15个subprocess。 每个进程在fork之前和之后打印父进程ID和进程ID。 我的代码如下,并正确评论,命令行参数应该是"ofile 3 2 -p" (我还没有得到实施-p/-c标志呢): #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { if(argc != 5)//checks for correct amount of arguments { return 0; } FILE * ofile;//file to write to pid_t pid […]

这个程序如何创build僵尸进程?

下面的程序如何工作,并创build一个在Linux下的僵尸进程? #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main () { pid_t child_pid; child_pid = fork (); if (child_pid > 0) { sleep (60); } else { exit (0); } return 0; }

你能解释这个C代码吗? (创build一个deamon程序)

我想很好地理解下面的代码: /* Become deamon + unstoppable and no zombies children (= no wait()) */ if(fork() != 0) return 0; /* Parent returns OK to shell */ signal(SIGCLD, SIG_IGN); /* ignore child death */ signal(SIGHUP, SIG_IGN); /* ignore terminal hangups */ for(i = 0; i < 32; i++) close(i); /* close open files */ setpgrp(); /* […]

Linux进程ID和线程ID

假设我们有许多在Linux上运行的用户进程。 每个进程都有很multithreading在运行。 我可以通过调用getpid()来获得进程ID,其返回值是一个整数。 我可以通过调用pthread_self()来获得线程ID,其返回值是一个不透明的types,称为pthread_t 。 现在我需要在共享内存中存储进程ID(一个int,通常是4个字节)和线程ID( pthread_t ,需要计算出多less字节),以便稍后可以使用这两个ID信息来标识特定线程并检查线程是否仍在运行。 我发现许多在线源将pthread_t转换为unsigned int或unsigned long 。 由于我不希望在转换过程中丢失任何数据,我应该如何处理pthread_t数据,以便它是一个固定大小的数据(如上所述,我需要将线程信息存储在共享内存中)。 另外,如何通过后面的进程标识和线程标识的组合来识别特定的线程? 如何检查线程是否仍在运行?

我如何确保一个stream程运行,即使它自己被杀死? (那么需要重新启动)

我正在使用Linux。 我想每次启动计算机时都要运行一个进程(一个irc bot)。 但是我有一个问题:networking不好,经常断开连接,所以我需要每天手动重启机器人几次。 我如何自动化? 附加信息:僵尸程序创build一个叫做bot.pid的pid文件僵尸程序重新连接自己,但只有几次。 networking太糟糕了,所以机器人有时会因为没有回应而自杀。 我现在做的(又名我的方法;))我有一个cron作业,每5分钟执行一次startbot.rb 。 (脚本本身与bot相同的目录中) 剧本: #!/usr/bin/ruby require 'fileutils' if File.exists?(File.expand_path('tmp/bot.pid')) @pid = File.read(File.expand_path('tmp/bot.pid')).chomp!.to_i begin raise "ouch" if Process.kill(0, @pid) != 1 rescue puts "Removing abandoned pid file" FileUtils.rm(File.expand_path('tmp/bot.pid')) puts "Starting the bot!" Kernel.exec(File.expand_path('./bot.rb')) else puts "Bot up and running!" end else puts "Starting the bot!" Kernel.exec(File.expand_path('./bot.rb')) end 它会检查pid文件是否存在,如果是,则检查是否kill -s […]

有没有办法使用Perl或Python检索进程统计信息?

有没有办法一般地检索使用Perl或Python的stream程统计信息? 我们可以保持它的Linux特定。 有几个问题:我不会提前知道PID,但是我可以从脚本本身运行有问题的进程。 例如,我没有问题在做: ./myscript.pl some/process/I/want/to/get/stats/for 基本上,我希望至less能够获得进程的内存消耗,但是我可以获得更多的信息(如进程的运行时间,进程的平均CPU使用率等) 谢谢。