"kill -l"はZERRのみを返します。

"kill -l"はZERRのみを返します。

送信しようとすると、SIGQUIT次のメッセージが表示されます。

$ kill -s QUIT 4341      
kill: unknown signal: SIGQUIT
kill: type kill -l for a list of signals

私はこれを見て驚きました:

$ kill -l
ZERR

だから何とかkillすべての信号名がわかりません。これがUbuntuの素晴らしい点です(はい、アップグレードする時間ですが、それは別の質問です)

当然SIGQUIT数字だけで送るのですが3kill信号名を忘れてしまう原因は何ですか?

UPD:これはzshです。

$ type kill     
kill is a shell builtin                
$ echo $ZSH_VERSION $ZSH_PATCHLEVEL                                                             
5.0.2 1.5778                           

うまくいくかどうかを確認したので、/bin/killzshに関連することに違いありません。

答え1

これは、zsh実行可能ファイルの構築方法に問題があるようです。シグナルのリストは、コンパイル時にオペレーティングシステムによって決定されます。信号ではなくエラーによる終了を示す「偽信号」がリストの最後に追加されZERRます。ビルドでは、オペレーティングシステムのシグナルリストが空です。

ステファン・チャゼラスが犯人を識別する、これは最新バージョンのGCCコンパイラとのビルドスクリプトの非互換性が修正されました。。最新バージョンのzshをビルドすると、問題を解決する必要があります。しかし、Ubuntu artfulには、あなたのバージョンよりも新しいバージョンのzsh 5.2が付属しています。以前の長期サポートバージョンのUbuntuにも5.1.1があります。したがって、互換性テストに以前のバージョンが必要ない限り、独自のバージョンを維持する理由はありません。この以前のバージョンを維持する必要がある場合は、以前のバージョンのGCCでビルドしてください。

答え2

あなたのシェルはほぼ確実であり、それをエイリアスまたは関数として定義したzshかもしれません(確認に使用)。killtype kill

しかし、まだあなたの状況を再現することはできません。

zsh$ kill -l 30
PWR
zsh$ kill -l 31
SYS
zsh$ kill -l 32
32
zsh$ kill -l -96
32

32"ZERR"はい、信号名テーブルのインデックスですzsh。しかし、分かるように、(少なくとも私のシステムでは)最大信号数(31)に正しく制限されています。

zshあなたの()とオペレーティングシステム()のecho $ZSH_VERSION $ZSH_PATCHLEVELバージョンで質問を更新してくださいuname -a。私はこれがデプロイメントポートで跳ね返る悪いパッチの1つだと思います(アップストリーム開発者が見直さない迅速な「修正」)。

修正する:

zshartfulからパッケージをインストールしてみてください。リポジトリ(バージョン5.2.5)またはソースから最新バージョンを再コンパイルしてくださいzsh

問題は、実際には以前のバージョンのバグが原因で発生しました。zsh/(システムヘッダーファイルで定義されているマクロ拡張の前に追加された行)によって生成された行の表示、混乱gcccpp# lnum_of_definition "header.h" 3 4signames2.awkシグナルと数値のリストを生成するスクリプトです。スクリプトを変更したのではなく、-P最新cppバージョンを渡したことに注意してくださいzsh

バラよりここ。ヒント @Stéphane Chazelasに感謝します。台本を見てみましたが、awk私の才能が不足して何年も変わっていないので、彼らは犯人だとは思わない。

関連情報