LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1765|回复: 4

某些程序(如kdm、sshd)有两个进程,这是为什么呢?(系统配置文件问题?)&&&am

[复制链接]
发表于 2009-7-14 20:14:35 | 显示全部楼层 |阅读模式
RT,这是什么缘故呢?是否是我的X启动配置文件不合理引起的?但是我基本上没有修改我的配置文件的
还有通过kdm来登陆系统,他是通过怎样的顺序来读取配置文件呢?是否是/usr/share/config/kdm下的Xsession文件作为全局配置文件,然后再读取用户目录下的.xsession文件?
通过xdm/kdm等来登录系统跟用startx很不同,目前还没能很好的理解这两种方式。还请大侠指教~~
先谢过了~~

启动过系统,*出kdm登陆界面,在另外一台PC上通过ssh得知:
localhost_lofeng ~ # ps -A
输出:
  PID TTY          TIME CMD
    1 ?        00:00:03 init
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 migration/0
    4 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 watchdog/0
    6 ?        00:00:00 migration/1
    7 ?        00:00:00 ksoftirqd/1
    8 ?        00:00:00 watchdog/1
    9 ?        00:00:00 events/0
   10 ?        00:00:00 events/1
   11 ?        00:00:00 work_on_cpu/0
   12 ?        00:00:00 work_on_cpu/1
   13 ?        00:00:00 khelper
  113 ?        00:00:00 kblockd/0
  114 ?        00:00:00 kblockd/1
  117 ?        00:00:00 kacpid
  118 ?        00:00:00 kacpi_notify
  167 ?        00:00:00 kseriod
  216 ?        00:00:00 pdflush
  217 ?        00:00:00 pdflush

  218 ?        00:00:00 kswapd0
  219 ?        00:00:00 aio/0
  220 ?        00:00:00 aio/1
  221 ?        00:00:00 nfsiod
  222 ?        00:00:00 xfs_mru_cache
  223 ?        00:00:00 xfslogd/0
  224 ?        00:00:00 xfslogd/1
  225 ?        00:00:00 xfsdatad/0
  226 ?        00:00:00 xfsdatad/1
  425 ?        00:00:00 iscsi_eh
  449 ?        00:00:00 kpsmoused
  457 ?        00:00:00 hid_compat
  460 ?        00:00:00 rpciod/0
  461 ?        00:00:00 rpciod/1
  768 ?        00:00:00 ata/0
  769 ?        00:00:00 ata/1
  770 ?        00:00:00 ata_aux
8587 ?        00:00:00 mpt_poll_0
8588 ?        00:00:00 scsi_eh_2
8754 ?        00:00:00 scsi_tgtd/0
8755 ?        00:00:00 scsi_tgtd/1
11107 ?        00:00:00 ksuspend_usbd
11112 ?        00:00:00 khubd
12090 ?        00:00:00 khpsbpkt
12743 ?        00:00:00 kstriped
13285 ?        00:00:00 ksnapd
13631 ?        00:00:00 dm-bbr/0
13632 ?        00:00:00 dm-bbr/1
14596 ?        00:00:00 jfsIO
14597 ?        00:00:00 jfsCommit
14598 ?        00:00:00 jfsCommit

14599 ?        00:00:00 jfsSync
15339 ?        00:00:00 kjournald
15455 ?        00:00:00 udevd
17610 ?        00:00:00 syslog-ng
17670 ?        00:00:01 dbus-daemon
17727 ?        00:00:00 console-kit-dae
17848 ?        00:00:00 hald
17849 ?        00:00:00 hald-runner
17852 ?        00:00:00 hald-addon-inpu
17859 ?        00:00:00 hald-addon-stor
17862 ?        00:00:00 hald-addon-acpi
17867 ?        00:00:00 hald-addon-stor
18404 ?        00:00:00 sshd
18491 ?        00:00:00 kdm

18554 tty2     00:00:00 agetty
18555 tty3     00:00:00 agetty
18556 tty4     00:00:00 agetty
18557 tty5     00:00:00 agetty
18558 tty6     00:00:00 agetty
20185 tty1     00:00:00 agetty
20186 tty7     00:00:09 X
20468 ?        00:00:00 kdm
20471 ?        00:00:00 kdm_greet
20475 ?        00:00:00 dbus-daemon
20476 ?        00:00:00 dbus-launch
20481 ?        00:00:00 sshd
20484 pts/0    00:00:00 bash
20485 pts/1    00:00:00 bash
20494 pts/0    00:00:00 ps


然后通过kdm登录系统,再在ssh中
localhost_lofeng ~ # ps -A
  PID TTY          TIME CMD
    1 ?        00:00:03 init
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 migration/0
    4 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 watchdog/0
    6 ?        00:00:00 migration/1
    7 ?        00:00:00 ksoftirqd/1
    8 ?        00:00:00 watchdog/1
    9 ?        00:00:00 events/0
   10 ?        00:00:00 events/1
   11 ?        00:00:00 work_on_cpu/0
   12 ?        00:00:00 work_on_cpu/1
   13 ?        00:00:00 khelper
  113 ?        00:00:00 kblockd/0
  114 ?        00:00:00 kblockd/1
  117 ?        00:00:00 kacpid
  118 ?        00:00:00 kacpi_notify
  167 ?        00:00:00 kseriod
  216 ?        00:00:00 pdflush
  217 ?        00:00:00 pdflush

  218 ?        00:00:00 kswapd0
  219 ?        00:00:00 aio/0
  220 ?        00:00:00 aio/1
  221 ?        00:00:00 nfsiod
  222 ?        00:00:00 xfs_mru_cache
  223 ?        00:00:00 xfslogd/0
  224 ?        00:00:00 xfslogd/1
  225 ?        00:00:00 xfsdatad/0
  226 ?        00:00:00 xfsdatad/1
  425 ?        00:00:00 iscsi_eh
  449 ?        00:00:00 kpsmoused
  457 ?        00:00:00 hid_compat
  460 ?        00:00:00 rpciod/0
  461 ?        00:00:00 rpciod/1
  768 ?        00:00:00 ata/0
  769 ?        00:00:00 ata/1
  770 ?        00:00:00 ata_aux
8587 ?        00:00:00 mpt_poll_0
8588 ?        00:00:00 scsi_eh_2
8754 ?        00:00:00 scsi_tgtd/0
8755 ?        00:00:00 scsi_tgtd/1
11107 ?        00:00:00 ksuspend_usbd
11112 ?        00:00:00 khubd
12090 ?        00:00:00 khpsbpkt
12743 ?        00:00:00 kstriped
13285 ?        00:00:00 ksnapd
13631 ?        00:00:00 dm-bbr/0
13632 ?        00:00:00 dm-bbr/1
14596 ?        00:00:00 jfsIO
14597 ?        00:00:00 jfsCommit
14598 ?        00:00:00 jfsCommit

14599 ?        00:00:00 jfsSync
15339 ?        00:00:00 kjournald
15455 ?        00:00:00 udevd
17610 ?        00:00:00 syslog-ng
17670 ?        00:00:01 dbus-daemon
17727 ?        00:00:00 console-kit-dae
17848 ?        00:00:00 hald
17849 ?        00:00:00 hald-runner
17852 ?        00:00:00 hald-addon-inpu
17859 ?        00:00:00 hald-addon-stor
17862 ?        00:00:00 hald-addon-acpi
17867 ?        00:00:00 hald-addon-stor
18404 ?        00:00:00 sshd
18491 ?        00:00:00 kdm

18554 tty2     00:00:00 agetty
18555 tty3     00:00:00 agetty
18556 tty4     00:00:00 agetty
18557 tty5     00:00:00 agetty
18558 tty6     00:00:00 agetty
20185 tty1     00:00:00 agetty
20186 tty7     00:00:10 X
20468 ?        00:00:00 kdm
20475 ?        00:00:00 dbus-daemon
20476 ?        00:00:00 dbus-launch
20481 ?        00:00:00 sshd
20484 pts/0    00:00:00 bash
20485 pts/1    00:00:00 bash
20495 ?        00:00:00 startkde
20537 ?        00:00:00 dbus-launch
20538 ?        00:00:00 dbus-daemon

20543 ?        00:00:00 kdeinit4
20544 ?        00:00:00 klauncher
20546 ?        00:00:00 kded4
20549 ?        00:00:00 gam_server
20557 ?        00:00:00 kwrapper4
20558 ?        00:00:00 ksmserver
20560 ?        00:00:00 kwin
20564 ?        00:00:00 knotify4
20565 ?        00:00:00 nepomukserver
20566 ?        00:00:01 plasma
20568 ?        00:00:00 nepomukservices
20570 ?        00:00:00 nepomukservices
20571 ?        00:00:00 nepomukservices
20572 ?        00:00:00 nepomukservices

20575 ?        00:00:00 kio_trash
20584 ?        00:00:00 kaccess
20585 ?        00:00:00 krunner
20588 ?        00:00:00 kio_trash
20593 ?        00:00:00 skim
20601 ?        00:00:00 klipper
20602 ?        00:00:00 skim
20603 ?        00:00:00 kdeinit
20605 ?        00:00:00 kdeinit

20608 ?        00:00:00 dcopserver
20610 ?        00:00:00 klauncher
20611 ?        00:00:00 kded
20612 ?        00:00:00 kded

20613 pts/0    00:00:00 ps
20614 ?        00:00:00 kbuildsycoca
 楼主| 发表于 2009-7-14 23:17:54 | 显示全部楼层
启动到X桌面,有两种方式:
1. 通过终端登录后,用startx 来启动(其实是使用xinit来实现启动X桌面的)。
通过这种方式启动到X桌面比较简单
通过vim /usr/bin/startx得知,这种方式可以通过设置 ~/.xinitrc 来设置自己需要的变量和启动的相关程序,当然,也可以在/etc/X11/xinit/xinitrc中来设置自己需要的变量和启动相关的程序。
userclientrc=$HOME/.xinitrc
sysclientrc=/etc/X11/xinit/xinitrc


userserverrc=$HOME/.xserverrc
sysserverrc=/etc/X11/xinit/xserverrc
没有明白xserverrc的具体作用,我的系统里没有这两个文件,用的也很好。估计影响不大

2. 通过X Display Manager来启动
我用的是kdm,由于不清楚通过这种方式来启动X桌面会读取哪些配置文件
先说下我通过相关文件知道的:
通过kdm来启动X桌面,当然会读取kdm的配置文件,查看了下估计是
/usr/share/config/kdm/Xsession
这个文件很重要,通过该文件可知该方式中会读取哪些文件
下面两个引用指明了使用bash时会读取哪些配置文件
[ -f /etc/profile ] && . /etc/profile
if [ -f $HOME/.bash_profile ]; then
. $HOME/.bash_profile
elif [ -f $HOME/.bash_login ]; then
. $HOME/.bash_login
elif [ -f $HOME/.profile ]; then
. $HOME/.profile
fi
[ -f /etc/xprofile ] && . /etc/xprofile
[ -f $HOME/.xprofile ] && . $HOME/.xprofile

下面这个引用中指明了kdm会根据我们选择的session来执行相应的动作
在我的系统中,kdm给出的界面中有四种session选择:failsafe、default、custom、KDE 4.2(previos) ,前三种从代码中能直接看出读取的是哪个配置文件。但是对于第四种,就有点迷糊了,应该是红色的代码实现该功能。推测应该会到/etc/X11/Sessions下面去寻找具体的文件,具体过程不明。
case $session in
"")
exec xmessage -center -buttons OK:0 -default OK "Sorry, $DESKTOP_SESSION is no valid session."
;;
failsafe)
exec xterm -geometry 80x24-0-0
;;
custom)
exec $HOME/.xsession
;;
default)
exec /usr/bin/startkde
;;
*)
eval exec "$session"
;;
esac
exec xmessage -center -buttons OK:0 -default OK "Sorry, cannot execute $session. Check $DESKTOP_SESSION.desktop."

这样这个过程就比较明朗了,但是,在系统将控制权交给kdm之前,可有做过跟X桌面有关的配置工作?或者说,在系统将控制权交给kdm之后,kdm是否直接读取/usr/share/config/kdm/Xsession?如果不是,会先读取哪些文件?

从这里的分析来看,/etc/X11/Sessions/Xsession貌似没有什么用,真的是没有什么用处的么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-14 23:42:54 | 显示全部楼层
另外,我的,/etc/X11/Sessions/kde-4.2文件内容如下:
#!/bin/sh
exec /usr/bin/startkde

这样看来跟default session一样,没有什么差别了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-19 16:14:15 | 显示全部楼层
目前我的系统是这样启动的:
在/etc/inittb中默认的启动级别是3,但是运行过#rc-update add xdm default
所以虽然默认的运行级别是3,但是仍然能通过kdm登录进入X Window
此时也可以通过console 登录(root用户),然后#startx也可进入X Window,但是如果是以普通用户登陆),#startx是不能进入X Window
————————————————————————————————————————————————————————————————

使用startx来启动X Window整个过程比较好理解,这个网上也有很多分析
只是在我的/etc/X11/目录下有些文件不存在,如xinit/xserverrc、Xresources、Xmodmap
————————————————————————————————————————————————————————————————

但是通过kdm来登录X Window却有点不好理解。
[color="Red"]系统启动后,会通过/etc/init.d/xdm来启动kdm,但是这个过程中,会读取哪些文件,读取的次序又是怎样的,则不是很清楚。
/usr/share/config/kdm/Xsession这个文件是比较重要的文件,我前面也提到过,但是在哪个文件中#source /usr/share/config/kdm/Xsession的呢?
还有具体是在什么地方启动X server也不是很明晰,不像startx中有很明确的xinit指令来启动Xserver
回复 支持 反对

使用道具 举报

发表于 2009-7-19 18:15:04 | 显示全部楼层
学习的
留名
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表