какие инструменты для исследования сбоя приостановки при закрытии крышки ноутбука?

Если Вы думаете о как strace работы затем, это имеет общий смысл, что ни один из builtins к Bash не был бы прослеживаем. strace может только проследить фактические исполняемые файлы, тогда как builtins не.

Например, мой cd команда:

$ type cd
cd is a function
cd () 
{ 
    builtin cd "$@";
    local result=$?;
    __rvm_project_rvmrc;
    __rvm_after_cd;
    return $result
}

Прием для strace'ing CD?

Я столкнулся с этой техникой, где Вы могли вызвать strace на фактическом bash процесс и таким образом, косвенно проследите cd тот путь.

Пример

$ stty -echo
$ cat | strace bash > /dev/null

Который приводит ко мне способность к strace bash процесс следующим образом:

....
getegid()                               = 501
getuid()                                = 500
getgid()                                = 501
access("/bin/bash", X_OK)               = 0
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=940312, ...}) = 0
geteuid()                               = 500
getegid()                               = 501
getuid()                                = 500
getgid()                                = 501
access("/bin/bash", R_OK)               = 0
getpgrp()                               = 32438
rt_sigaction(SIGCHLD, {0x43e360, [], SA_RESTORER, 0x34e7233140}, {SIG_DFL, [], SA_RESTORER, 0x34e7233140}, 8) = 0
getrlimit(RLIMIT_NPROC, {rlim_cur=1024, rlim_max=62265}) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
fcntl(0, F_GETFL)                       = 0 (flags O_RDONLY)
fstat(0, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
lseek(0, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, 

Это - подсказка Bash, где она находится там, ожидая некоторого входа. Поэтому давайте дадим ему команду cd ..:

read(0, "c", 1)                         = 1
read(0, "d", 1)                         = 1
read(0, " ", 1)                         = 1
read(0, ".", 1)                         = 1
read(0, ".", 1)                         = 1
read(0, "\n", 1)                        = 1
stat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/home/saml", {st_mode=S_IFDIR|0700, st_size=32768, ...}) = 0
stat("/home/saml/tst", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
stat("/home/saml/tst/90609", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
stat("/home/saml/tst/90609", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("/home/saml/tst")                 = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, 

От вышеупомянутого вывода Вы видите, где я ввел команду, cd .. и хит входит, (\n). Оттуда Вы видите что stat() функция была вызвана, и что впоследствии Bash находится в другом read(0.. подсказка, ожидающая другой команды.

4
19.08.2015, 01:58
1 ответ

Некоторые версии systemd отказываются приостанавливаться, если вы закрываете крышку в течение трех минут после загрузки машины, и, возможно, еще один меньший тайм-аут после возобновления. Эти количества не настраиваются. Может быть, это ваша проблема?

Чтобы узнать об инструментах для отладки, см. Этот пост для увеличения уровня журнала, чтобы logind действительно сообщал вам, почему он не приостанавливается (не очень интуитивно):

http: //lists.freedesktop .org / archives / systemd-devel / 2013-March / 010004.html

update

На основании комментария @ ajp кажется, что решение, которое вы хотите, при условии, что ваша systemd обновлена, - это добавить HoldoffTimeoutSec = 0 с до /etc/systemd/logind.conf . На самом деле, теперь это, похоже, задокументировано на странице руководства для systemd.conf . Я рад, что я кое-что узнал, отвечая на этот вопрос.

3
27.01.2020, 20:57

Теги

Похожие вопросы