session_manager 用于管理Chrome進(jìn)程的生命周期。通常位于目錄login_manager下,并通過包chromeos-login安裝。
安裝包信息
在ChromeOS的編譯環(huán)境下查詢chromeos-login的包信息如下:
$ emerge -s chromeos-login
Searching...
[ Results for search key : chromeos-login ]
[ Applications found : 1 ]
* chromeos-base/chromeos-login
Latest version available: 0.0.2-r2839
Latest version installed: [ Not Installed ]
Size of files: 0 KiB
Homepage: http://www.chromium.org/
Description: Login manager for Chromium OS.
License: BSD-Google
而其所依賴的包信息如下:
$ emerge -p chromeos-login
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ] app-arch/snappy-1.0.4 USE="-static-libs"
[ebuild N ] sys-apps/keyutils-1.5.9-r3 USE="-static -static-libs {-test}" ABI_X86="(64) -32 (-x32)"
[ebuild N ] chromeos-base/chromeos-config-tools-0.0.1-r248 USE="cros_host -asan -clang -cros-debug -profiling {-test}"
[ebuild N ] chromeos-base/libchromeos-ui-0.0.1-r759 USE="cros_host -asan -clang -cros-debug -profiling {-test}"
[ebuild N ] chromeos-base/libscrypt-1.1.6-r12 USE="cros_host -asan -clang -profiling -static-libs"
[ebuild N ] dev-util/google-perftools-2.0-r2 USE="debug -largepages -minimal -static-libs {-test}"
[ebuild N ] sys-fs/lvm2-2.02.97-r4 USE="lvm1 readline udev (-clvm) (-cman) -device-mapper-only -selinux -static -static-libs -thin"
[ebuild N ] sys-fs/ecryptfs-utils-101 USE="python -doc -gpg -gtk -openssl -pam -pkcs11 -suid -tpm"
[ebuild N ] dev-libs/leveldb-1.18-r1 USE="snappy tcmalloc -static-libs"
[ebuild N ] app-crypt/trousers-0.3.3-r61 USE="cros_host -cros-debug -doc -profiling -systemd -tss_trace"
[ebuild N ] chromeos-base/libcontainer-0.0.1-r534 USE="cros_host device-mapper -asan -clang -cros-debug -profiling {-test}"
[ebuild N ] chromeos-base/chaps-0.0.1-r1945 USE="cros_host -asan -clang -cros-debug -profiling -systemd {-test} -tpm -tpm2"
[ebuild N ] chromeos-base/cryptohome-0.0.1-r1731 USE="cros_host -asan -clang -cros-debug -direncryption -profiling -systemd {-test} -tpm -tpm2"
[ebuild N ] chromeos-base/chromeos-login-0.0.2-r2839 USE="cros_host -asan -cheets -clang -cros-debug -profiling -systemd {-test} -unibuild"
ebuild信息
chromeos-login對應(yīng)的ebuild文件位于目錄src/third_party/chromiumos-overlay/chromeos-base/chromeos-login下:
# tree .
.
├── chromeos-login-0.0.2-r2839.ebuild
├── chromeos-login-9999.ebuild
└── files
└── chromeos-version.sh
1 directory, 3 files
由該配置文件可知最終編譯出來的二進(jìn)制文件位于/sbin/session_manager目錄下。
再查閱其中的ebuild文件發(fā)現(xiàn)對應(yīng)的工作目錄為src/platform2,在該目錄下稍作搜索可知,session_manager實現(xiàn)在目錄src/platform2/login_manager中,對應(yīng)的gyp配置文件為src/platform2/login_manager/login_manager.gyp,其中session_manager相關(guān)的內(nèi)容如下:
{
'target_name': 'session_manager',
'type': 'executable',
'libraries': [
'-lrootdev',
'-lcontainer',
],
'dependencies': ['libsession_manager'],
'sources': ['session_manager_main.cc'],
},
session_manager代碼實現(xiàn)的具體細(xì)節(jié),就可以跟隨文件src/platform2/login_manager/session_manager_main.cc向下繼續(xù)查看。