神奇的 SysRq 键是 Linux 内核可以理解的组合键,它允许用户执行各种操作低级命令 无论系统的状态如何。它通常用于从冻结中恢复,或在不损坏文件系统的情况下重新启动计算机。
低级命令有哪些表中的键调用?
它们是可以在终端中运行的程序吗?
这些键与 gnome 或 unity 的快捷键有何不同?
答案1
在linux内核源代码中sysrq.c 第 415 行,定义了一个结构体,当按下某个键时会发生什么。所以你看,终端中没有命令被执行,而是调用内核中的硬编码函数。因此,只要内核没有崩溃,您就可以按下这些键,无论哪个应用程序在前台运行,内核都会处理按下的键。
这是有趣的部分:
[...]
415 static struct sysrq_key_op *sysrq_key_table[36] = {
416 &sysrq_loglevel_op, /* 0 */
417 &sysrq_loglevel_op, /* 1 */
418 &sysrq_loglevel_op, /* 2 */
419 &sysrq_loglevel_op, /* 3 */
420 &sysrq_loglevel_op, /* 4 */
421 &sysrq_loglevel_op, /* 5 */
422 &sysrq_loglevel_op, /* 6 */
423 &sysrq_loglevel_op, /* 7 */
424 &sysrq_loglevel_op, /* 8 */
425 &sysrq_loglevel_op, /* 9 */
426
427 /*
428 * a: Don't use for system provided sysrqs, it is handled specially on
429 * sparc and will never arrive.
430 */
431 NULL, /* a */
432 &sysrq_reboot_op, /* b */
433 &sysrq_crash_op, /* c & ibm_emac driver debug */
434 &sysrq_showlocks_op, /* d */
435 &sysrq_term_op, /* e */
436 &sysrq_moom_op, /* f */
437 /* g: May be registered for the kernel debugger */
438 NULL, /* g */
439 NULL, /* h - reserved for help */
440 &sysrq_kill_op, /* i */
441 #ifdef CONFIG_BLOCK
442 &sysrq_thaw_op, /* j */
443 #else
444 NULL, /* j */
445 #endif
446 &sysrq_SAK_op, /* k */
447 #ifdef CONFIG_SMP
448 &sysrq_showallcpus_op, /* l */
449 #else
450 NULL, /* l */
451 #endif
452 &sysrq_showmem_op, /* m */
453 &sysrq_unrt_op, /* n */
454 /* o: This will often be registered as 'Off' at init time */
455 NULL, /* o */
456 &sysrq_showregs_op, /* p */
457 &sysrq_show_timers_op, /* q */
458 &sysrq_unraw_op, /* r */
459 &sysrq_sync_op, /* s */
460 &sysrq_showstate_op, /* t */
461 &sysrq_mountro_op, /* u */
462 /* v: May be registered for frame buffer console restore */
463 NULL, /* v */
464 &sysrq_showstate_blocked_op, /* w */
465 /* x: May be registered on ppc/powerpc for xmon */
466 /* x: May be registered on sparc64 for global PMU dump */
467 NULL, /* x */
468 /* y: May be registered on sparc64 for global register dump */
469 NULL, /* y */
470 &sysrq_ftrace_dump_op, /* z */
471 };
[...]
从技术上讲,您也可以在终端中调用它们,但是,您可以在 proc 文件系统中编写一个名为/proc/sysrq-trigger
.例如,您可以执行以下操作:
echo b >/proc/sysrq-trigger
...它会立即重新启动机器,而不询问或警告或任何东西。与按SysRq-时的效果相同b。