何为什么是守护进程程?

1:什么是Linux下的守护进程
  Linux daemon是运行于后台常驻内存的一种特殊进程,周期性的执行或者等待trigger执行某个任务,与用户交互断开,独立于控制终端。一个守护进程的父进程是init进程,它是一个孤儿进程,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都被丢到了/dev/null中。守护进程一般用作服务器进程,如httpd,syslogd等。
2:进程,进程组,会话,控制终端之间的关系
  因为守护进程的创建需要改变这些环境参数,所以了解它们之间的关系很重要:
  上图就描述了它们之间的联系:
  2.1 进程组:它是由一个或多个进程组成,进程组号(GID)就是这些进程中的进程组长的PID。
  2.2 会话:其实叫做会话期(session),它包括了期间所有的进程组,一般一个会话期开始于用户login,一般login的是shell终端,所以shell终端又是此次会话期的首进程,会话一般结束于logout。对于非进程组长,它可以调用setsid()创建一个新的会话。
  2.3 控制终端(tty):一般就是指shell终端,它在会话期中可有也可以没有。
3:创建一个daemon的几个步骤
  3.1 实例(创建一个daemon,每隔10秒向/mydaemon.log文件写入当前时间一共三次)
1 void mydaemon(void)
int fd, i,
pid = fork();
if(pid & 0)
ERROR_EXIT("First fork failed!");
if(pid & 0)
exit(EXIT_SUCCESS);// father exit
if(setsid() == -1)
ERROR_EXIT("setsid failed!");
pid = fork();
if(pid & 0)
ERROR_EXIT("Second fork failed!");
if(pid & 0)// father exit
exit(EXIT_SUCCESS);
#ifdef RLIMIT_NOFILE
/* 关闭从父进程继承来的文件描述符 */
if (getrlimit(RLIMIT_NOFILE, &rl) == -1)
ERROR_EXIT("getrlimit failed!");
nfiles = rl.rlim_cur = rl.rlim_
setrlimit(RLIMIT_NOFILE, &rl);
for(i=3; i& i++)
31    #endif
/* 重定向标准的3个文件描述符 */
if(fd = open("/dev/null", O_RDWR) & 0)
ERROR_EXIT("open /dev/null failed!");
for(i=0; i&3; i++)
dup2(fd, i);
37    if(fd & 2) close(fd);
/* 改变工作目录和文件掩码常量 */
chdir("/");
  3.2 解读创建daemon的过程
  A(7~12行):成为后台进程
    用fork创建子进程,父进程退出,子进程成为孤儿进程被init接管,子进程变为后台进程。
  B(14~15行):脱离父进程的控制终端,登陆会话和进程组
    调用setsid()让子进程成为新会话的组长,脱离父进程的会话期。setsid()在调用者是某进程组组长时会失败,但是A已经保证了子进程不会是组长,B之后子进程变成了新会话组的组长。
  C(17~22行):禁止进程重新开启控制终端
    因为会话组的组长有权限重新打开控制终端,所以这里第二次fork将子进程结束,留着孙进程,孙进程不是会话组的组长所以没有权利再打开控制终端,这样整个程序就与控制终端隔离了。
  D(23~31行):关闭文件描述符
    进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。
  E(32~36行):重定向0,1,2标准文件描述符
    将三个标准文件描述符定向到/dev/null中
  F(38~40行):改变工作目录和文件掩码
    进程活动时,其工作目录所在的文件系统不能卸下(比如工作目录在一个NFS中,运行一个daemon会导致umount无法成功)。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如chdir("/tmp"),进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0);
  注:D,E,F三步是对当前工作环境的修改,可以先做,因为这些修改都会被子进程继承下来
4:实例运行
#define ERROR_EXIT(m)\
perror(m);\
exit(EXIT_FAILURE);\
int main(int argc, char **argv)
mydaemon();
fd = open("./mydaemon.log", O_RDWR|O_CREAT, 0644);
if(fd & 0)
ERROR_EXIT("open /mydaemon.log failed!");
for(i=0; i&3; i++)
t = time(0);
char *buf = asctime(localtime(&t));
write(fd, buf, strlen(buf));
sleep(10);
close(fd);
  上图是main函数,运行结果如下图:
  有图可知,在open /mydaemon.log文件没有权限,而切换到root权限后执行成功,文件的内容也是每10秒间隔写入一次时间。因为我创建的mydaemon程序的工作目录已经切换到了根目录,所以普通用户没有在根目录下创建文件的权限。如果这里将文件创建在当前目录的话就不用切换到root权限。
5:函数daemon()
  其实在linux下已经有函数daemon函数用于创建一个后台程序了,所以上面的工作已经被加入了函数库,直接使用轮子。
  5.1 daemon函数原型及描述
#include &unistd.h&
int daemon(int nochdir, int noclose);
DESCRIPTION
The daemon() function is for programs wishing to detach themselves from the controlling terminal and run in the background as system daemons.
If nochdir is zero, daemon() changes the process's current working directory to the root directory ("/"); otherwise,the current working directory is left unchanged.
If noclose is zero, daemon() redirects standard input, standard output and standard error to /dev/null; otherwise, no changes are mad to these file descriptors.
  通过man手册的描述可知,函数daemon接收两个参数:
  nochdir:如果是0,将当前工作目录切换到根目录"/",否则工作目录不改变。
  noclose:如果是0,将0,1,2重定向到/dev/null,否则不变。
  5.2 mydaemon和daemon
  其实可以将mydeamon函数稍加修改符合daemon函数
1 void mydaemon(int nochdir, int noclose)
int fd, i,
pid = fork();
if(pid & 0)
ERROR_EXIT("First fork failed!");
if(pid & 0)
exit(EXIT_SUCCESS);// father exit
if(setsid() == -1)
ERROR_EXIT("setsid failed!");
pid = fork();
if(pid & 0)
ERROR_EXIT("Second fork failed!");
if(pid & 0)// father exit
exit(EXIT_SUCCESS);
23    #ifdef RLIMIT_NOFILE
/* 关闭从父进程继承来的文件描述符 */
if (getrlimit(RLIMIT_NOFILE, &rl) == -1)
ERROR_EXIT("getrlimit failed!");
nfiles = rl.rlim_cur = rl.rlim_
setrlimit(RLIMIT_NOFILE, &rl);
for(i=3; i& i++)
/* 重定向标准的3个文件描述符 */
if(!noclose)
if(fd = open("/dev/null", O_RDWR) & 0)
ERROR_EXIT("open /dev/null failed!");
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
if(fd & 2)
close(fd);
/* 改变工作目录和文件掩码常量 */
if(!nochdir)
chdir("/");
  问题:这样普通用户调用mydaemon(0,0)函数时还是会在console提示open mydaemon.log failed!: Permission denied,但是在37~39行已经将它们重定向到了/dev/null了,很疑惑??当你close(0,1,2)之后普通用户才不会提示错误信息。
阅读(...) 评论()Java开发守护进程 是什么?
全部答案(共1个回答)
一样的程序。而查了好久资料,没找到java如何开发linux的守护进程。用C语言开发感觉太麻烦了,何况还要嵌入业务。使用Servlet的话也行,但是需要额外安装tomcat。经过一天实验,终于发现,原来这么简单!先来段简单代码,每隔5秒更新job.log文件。用来测试一下。import java.io.BufferedWimport ja...
其实就是想开发个Windows下系统一样的程序。而查了好久资料,没找到java如何开发linux的守护进程。用C语言开发感觉太麻烦了,何况还要嵌入业务。使用Servlet的话也行,但是需要额外安装tomcat。经过一天实验,终于发现,原来这么简单!先来段简单代码,每隔5秒更新job.log文件。用来测试一下。import java.io.BufferedWimport java.io.Fimport java.io.FileWimport java.io.IOEimport java.util.Dpublic class Program {/*** @param args*/public static void main(String[] args) {File f = new File("/home/xieping/job.log");if (!f.exists()) {try {f.createNewFile();} catch (IOException e) {e.printStackTrace();}}while (true) {try {BufferedWriter output = new BufferedWriter(new FileWriter(f));output.write(new Date().toString());output.close();} catch (IOException e1) {e1.printStackTrace();}try {Thread.sleep(1000 * 5);} catch (InterruptedException e) {e.printStackTrace();}}}}打包,我是用eclipse打包的,导出个jar包就行了。把文件放到/home/xieping/目录下。文件名 job.jar。开始设置为守护进程了!!简单吧,就加一个&符号。可以查看下编辑特别推荐:深入Java核心:JVM中的栈和局部变量Java异常处理原理及应用Java控制台打印九九乘法表
Windows下系统服务一样的程序.而查了好久资料,没找到java如何开发linux的守护进程.
现将实现代码公布如下:
.BufferedWr...
查看系统启动项的方法一:‘打开开始菜单--&运行--&msconfig--&启动’就可以查看了。
另一种方法是:
你下载并安装‘360安全卫士’它有一个查看启动...
java实战经典答案 /link?url=RHYYLCHA9dDYZqEejqO-SHHtv_pK...
不清楚你说的意思?
如果是开发工具:
IDE就有Eclipse, NetBeans, Jbuilder,IBM RAD等;学习也可以JDK+UE(或记事本).
答: 工地人员管理系统安装找哪家好呢?
答: 硬盘安装(适合无光驱或者不想浪费光盘的用户,但是需要你有一个可以使用的Windows系统) 请提取ISO中的“WINXPSP3.GHO”和“GHO镜像安装器.E...
答: 保护系统安全,是指从整体电子商务系统或网络支付系统的角度进行安全防护,它与网络系统硬件平台、操作系统、各种应用软件等互相关联
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区守护进程 - CSDN博客
什么是守护进程?
,也就是通常说的
Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
是个特殊的,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在
Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。
Linux 的大多数服务器就是用守护进程实现的。比如,Internet 服务器 inetd,Web 服务器 httpd 等。
如何查看守护进程
在终端敲:ps axj
a 表示不仅列当前用户的进程,也列出所有其他用户的进程x 表示不仅列有控制终端的进程,也列出所有无控制终端的进程j 表示列出与作业控制相关的信息
从上图可以看出守护进行的一些特点:
守护进程基本上都是以超级用户启动( UID 为 0 )没有控制终端( TTY 为 ?)终端进程组 ID 为 -1 ( TPGID 表示终端进程组 ID)
一般情况下,守护进程可以通过以下方式启动:
在系统启动时由启动脚本启动,这些启动脚本通常放在 /etc/rc.d 目录下;
利用 inetd 超级服务器启动,如 telnet 等;
由 cron 定时启动以及在终端用 nohup 启动的进程也是守护进程。
如何编写守护进程?
下面是编写守护进程的基本过程:
1)屏蔽一些控制终端操作的信号
这是为了防止守护进行在没有运行起来前,控制终端受到干扰退出或挂起。关于信号的更详细用法,。
2)在后台运行
这是为避免挂起控制终端将守护进程放入后台执行。方法是在进程中调用 fork() 使父进程终止, 让守护进行在子进程中后台执行。&
3)脱离控制终端、登录会话和进程组
有必要先介绍一下 Linux 中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的
shell 登录终端。 控制终端、登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们 ,使之不受它们的影响。因此需要调用 setsid() 使子进程成为新的会话组长,示例代码如下:
setsid() 调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。&
4)禁止进程重新打开控制终端
现在,进程已经成为无终端的会话组长,但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端,采用的方法是再次创建一个子进程,示例代码如下:
5)关闭打开的文件描述符
进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:
6)改变当前工作目录
进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如 /tmp。示例代码如下:
7)重设文件创建掩模
进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取权限。为防止这一点,将文件创建掩模清除:
8)处理 SIGCHLD 信号
但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源(关于僵尸进程的更多详情,)。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在
Linux 下可以简单地将 SIGCHLD 信号的操作设为 SIG_IGN 。关于信号的更详细用法,。
这样,内核在子进程结束时不会产生僵尸进程。
示例代码如下:
运行结果如下:
本文已收录于以下专栏:
相关文章推荐
转载自:http://blog.chinaunix.net/uid-8194676-id-2513202.html
tty是Teletype的缩写(转)
终端是一种字符型设备,它有多种...
arm堆栈指针,满递减栈,空递减栈
arm函数调用和返回过程详解ATPCS建议函数的形参不超过4个,如果形参个数少于或等于4,则形参由R0,R1,R2,R3四个寄存器进行传递;若形参个数大于4,大于4的部分必须通过堆栈进行传递0x00 ...
Arm上函数调用的规则在ARM System Developer's Guide文档中的ATPCS部分有详细的定义,这里主要通过函数调用过程中函数栈的情况来说明fp和sp等寄存器的作用。有关ATPCS...
一、fork入门知识
二、fork进阶知识
三、fork高阶知识
tty命令用于打印标准输入的文件名称(print the file name of the terminal connected to standard input,打印与标准输入连接...
今天台风又来袭, 没上班, 在家写了十多篇CSDN博文,累了, 睡!
       Mark一下
List是接口,ArrayList是JDK里提供的一个实现类。List list = new ArrayList();编译时类型是List,运行时类型是ArrayList,而List接口的实现类不只有...
毕业5年决定你的一生
humble数的定义:humber = pow(2, a1) * pow(3, a2) * pow(5, a3) * pow(7, a4); 其中 a1, a2, a3, a4均为非负整数,且不全为0...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
Linux服务器的守护进程简介
  1. 守护进程简介
  守护进程也称进程是生存期长的一种进程,它们常常在系统引导装入时启动,在系统管比时终止。精灵进程没有控制终端,所以它们是在后台运行的。守护进程是一种很有用的进程。的大多数就是用守护进程实现的。比如,Internet服务器inetd,httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
  所有精灵进程都以超级用户(用户ID为0)的优先权运行。没有一个精灵进程具有控制终端―控制名称设置为问号、终端前台进程组ID设置为-1。除update以外的所有精灵进程都是组的首进程,期的首进程,而且是这些进程组和对话期中的唯一进程。所以的精灵进程的父进程都是init进程。
  守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。
  2. 建立守护进程关键步骤
  创建一个守护进程,有几个关键的步骤,也有几个地方需要注意,
  几个关键的步骤有:
  1:清除文件创建权限
  2:调用fork,然后使父进程退出
  3:调用setsid以创建一个新的会话,有三个目的使调用进程 a:成为新会话的首进程,b:成为新进程的组长进程,c:没有控制终端
  4:切换工作目录
  5:关闭不需要的文件描述符
  6:某些守护进程打开/dev/null使其具有文件描述符0,1,2这样任何一个试图读标准输入写标准输出或标准出错的库历程都不会产生任何效果。
  需要注意的地方
  1:因为守护进程没有控制终端,所以不能与标准输入输出出错进行交互,不能使用printf,通常用syslog来解决守护进程的打印信息
  3. 建立守护进程详细步骤
  1. 在后台运行。
  为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
  if(pid=fork())
  exit(0);//是父进程,结束父进程,子进程继续
  2. 脱离控制终端,登录会话和进程组
  有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。
  控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长:
  setsid();
  说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
  3. 禁止进程重新打开控制终端
  现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:
  if(pid=fork())
  exit(0);//结束第一子进程,第二子进程继续(第二子进程不再是会话组长)
  4. 关闭打开的文件描述符
  进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:
  for(i=0;i&=i++) close(i);
  5. 改变当前工作目录
  进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如/tmp,chdir("/")
  6. 重设文件创建掩模
  进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0);
  7. 处理SIGCHLD信号
  处理SIGCHLD信号并不是。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将 SIGCHLD信号的操作设为SIG_IGN。
  signal(SIGCHLD,SIG_IGN);
  这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。
  4. 参考代码
  #include
  #include
  #include
  #include
  #include
  #include
  void daemonize(const char *cmd)
  int i, fd0, fd1, fd2;
  * Clear file creation mask.
  umask(0);
  * Get maximum number of file descriptors.
  if (getrlimit(RLIMIT_NOFILE, &rl) & 0)
  printf("%s: can't get file limit", cmd);
  * Become a leader to lose controlling TTY.
  if ((pid = fork()) & 0)
  printf("%s: can't fork", cmd);
  else if (pid != 0) /* parent */
  exit(0);
  setsid();
  * Ensure future opens won't allocate controlling TTYs.
  sa.sa_handler = SIG_IGN;
  sigemptyset(&sa.sa_mask);
  sa.sa_flags = 0;
  if (sigaction(SIGHUP, &sa, NULL) & 0)
  printf("can't ignore SIGHUP");
  if ((pid = fork()) & 0)
  printf("%s: can't fork", cmd);
  else if (pid != 0) /* parent */
  exit(0);
  * Change the current working directory to the root so
  * we won't prevent file systems from being unmounted.
  if (chdir("/") & 0)
  printf("can't change directory to /");
  * Close all open file descriptors.
  if (rl.rlim_max == RLIM_INFINITY)
  rl.rlim_max = 1024;
  for (i = 0; i & rl.rlim_ i++)
  close(i);
  * Attach file descriptors 0, 1, and 2 to /dev/null.
  fd0 = open("/dev/null", O_RDWR);
  fd1 = dup(0);
  fd2 = dup(0);
  * Initialize the log file.
  openlog(cmd, LOG_CONS, LOG_DAEMON);
  if (fd0 != 0 || fd1 != 1 || fd2 != 2) {
  syslog(LOG_ERR, "unexpected file descriptors %d %d %d",fd0, fd1, fd2);
  exit(1);
  syslog(LOG_DEBUG, "daem ok ");
  int main()
  daemonize("test");
  while(1);//守护进程所要干的事情
[ 责任编辑:之极 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte

我要回帖

更多关于 linux守护进程 的文章

 

随机推荐