回答:
GNU / Linux [少なくともSystemV initスタイルに基づくもの]では、ctrl+ alt+ の動作は、次のような行を読み取ることができるはずのdel設定ファイルに依存します/etc/inittab
。
<id>::ctrlaltdel:/sbin/shutdown -t3 -r now
(ArchLinuxディストリビューションの例)これは、キーの組み合わせを受信するとシステムがシャットダウンされることを意味します。しかし、*のような何か他のことをしたいかもしれません:
<id>::ctrlaltdel:/usb/bin/sudo make me a sandwich
(これははるかに便利です:)
LinuxでAlt+ Ctrl+のショートカットを作成することはできますDelが、他にも興味深い組み合わせがいくつかあります。
押しAltとSysRq(あるPrint Screenキー)と入力しREISUB、各キーの間にいくつかの(私は通常5まで数える)秒であなたは安全に再起動されます。REISUO再起動ではなくシャットダウンを行います。コメントで指摘されているように、これは単一のコマンドではなく、それぞれが特定のことを行う多くのコマンドの組み合わせです。したがって、詳細については、REISUB(Linuxの穏やかな再起動)を参照することをお勧めします。
そして、あなたはすでにこれを知っているかもしれないが、プレスAlt+ Ctrl+キーのいずれかからF1のF6テキストモードと使用コマンドラインでのログインに使用することができますいつでも、でコンソールを取得します。これは、デスクトップ環境を台無しにしたときに非常に役立ちました。
reisub
実際に何をするかを説明します。これは単一のコマンドではなく、6つのコマンドの組み合わせで、それぞれが特定の処理を行います(詳細については、マジックSysRqキーに関するウィキペディアの記事を参照してください)。ので、もしあなたがi
あまりにも速くヒットしたらe
、プログラムがまだシャットダウンしている間にプログラムを殺すことができます-私がこの答えを読んだ後にしたように。
はい、ただし、実行するアクションはデスクトップマネージャーの構成によって異なります。KDEでは、システムを再起動するか停止するかを選択できるダイアログが表示されます。
Linuxコンソールでは、ほとんどのディストリビューションのデフォルトで、Ctrl+ Alt+ DelはMS-DOSと同様に動作します-システムを再起動します。
GUIでは、Ctrl+ Alt+ Backspaceは現在のXサーバーを強制終了し、新しいサーバーを起動します。したがって、WindowsのSAKシーケンスのように動作します(Ctrl+ Alt+ Del)。
REISUBは最も近いものです。Magic SysRqキーは、Linux / UNIXで従来のWindows / DOSハードリセットをエミュレートする唯一の方法です。
プログラムマネージャーのようなインターフェイスの場合、topを使用し、「k」illの「k」を押します。
Ctrl+ Alt+ Backspaceは、Xサーバー> 1.6ではデフォルトで無効になっています(ただし、一部のディストリビューションでは、出荷する構成ファイルで再度有効になっています)。それはWindowsの何をしていませんがCtrl+ Alt+は、Del一般的な殺傷Xにし、不正な動作プログラムを固定し、マシンを再起動するよりも好ましいです。
Linuxカーネルはハードリブートするか、SIGINTにinitプロセスを送信することができますCtrl+ Alt+Del
したがって、SIGINTの動作が有効になっている場合は、initで必要なことをCtrl+ Alt+ Del実行できます。
Linuxカーネル自体は、Ctrl+ Alt+ から2つの可能な動作を許可しますDel。
使用される動作は、次のいずれかで選択できます。
reboot
システムコール、参照 man 2 reboot
/proc/sys/kernel/ctrl-alt-del
たとえば、BusyBoxの1.28.3 initは、次のように指定さ/etc/inittab
れた任意のコマンドを実行します。
::ctrlaltdel:/sbin/reboot
また、uclibcの最小限の興味深いCの例を以下に示します。
#define _XOPEN_SOURCE 700
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/reboot.h>
#include <unistd.h>
void signal_handler(int sig) {
write(STDOUT_FILENO, "cad\n", 4);
signal(sig, signal_handler);
}
int main(void) {
int i = 0;
/* Disable the forced reboot, enable sending SIGINT to init. */
reboot(RB_DISABLE_CAD);
signal(SIGINT, signal_handler);
while (1) {
sleep(1);
printf("%d\n", i);
i++;
}
return EXIT_SUCCESS;
}
これを試す簡単なセットアップを次に示します。