OpenAIの運営団体として機能する米非営利団体OpenAIの取締役会は11月17日(現地時間)、共同創業者のサム・アルトマン氏(38)がCEOを辞任し、取締役会を離れることを発表した。
OpenAIの取締役会、サム・アルトマンCEOを解任 「取締役会の責任を果たす能力に支障をきたしている」 - ITmedia NEWS
取締役会は公式ブログで、「アルトマン氏の辞任は、取締役会による審議プロセスを経たもの」であり、同氏が「取締役会とのコミュニケーションにおいて一貫して率直でなく、取締役会の責任を果たす能力に支障をきたしているとの結論に達した。取締役会はもはや、同氏が今後もOpenAIをリードし続ける能力があるとは信じられない」としている。
OpenAIの取締役会、サム・アルトマンCEOを解任 「取締役会の責任を果たす能力に支障をきたしている」 - ITmedia NEWS
OpenAIの共同創業者のグレッグ・ブロックマン社長は社長には留任するが、取締役会会長は辞任する。
OpenAIの取締役会、サム・アルトマンCEOを解任 「取締役会の責任を果たす能力に支障をきたしている」 - ITmedia NEWS
米OpenAIの社長を辞任したグレッグ・ブロックマン氏は11月17日深夜(現地時間)、取締役会によるサム・アルトマンCEOの解任について、「知っていること」をX(旧Twitter)にポストした。
それによると、アルトマン氏は16日の夜に共同創業者でチーフサイエンティストのイリヤ・サツケバー氏から17日の正午に話したいというメールを受け取り、その時刻にGoogle Meetに参加したところ、取締役会長のブロックマン氏以外の取締役全員が参加しており、サツケバー氏から解雇を言い渡されたという。
ブロックマン氏は12時23分にサツケバー氏からGoogle Meetに招待され、その場でアルトマン氏の解雇と自身の取締役解任、社長としての留任について知らされた。OpenAIはそのタイミングでアルトマン氏が辞任するという公式ブログを公開した。
⇧ 経緯が分からんので何とも言えんけど、共同創業者同士であっても、ミュージシャンのような方向性の違い、みたいな感じのことが起こるんね。
まぁ、何て言うか、村八分的な感じで秘密裏に事を進めてるところと、共同創業者全員の連帯責任みたいな感じにはならないんだ、ってところがモヤモヤしますな...
LinuxのシェルスクリプトでのException Handlingってどうなってる?
awkにはException Handlingのような仕組みが存在しないけど、Linuxのシェルスクリプトでは、trapを利用することで、Exception Handlingに近しいことはできると、ネット上の情報では言っている。
で、
Regardless of where the exception table resides, I'm certain that it is memory reserved by the kernel, and likewise the exception handling functions are defined in the kernel source code; e.g. traps.c and related.
⇧ stackoverflowによると、traps.c というソースコードが、Exception Handling的な役割を担っていると。
⇧ signalを確認してそうではありそうですと。
ネットの情報を漁った限りでは、
System calls. In a typical execution of an OS kernel, such as Linux, application threads run in a physical core in unprivileged mode. Applications execute in this unprivileged mode until a trap handler transfers control back to the kernel in privileged mode. Invoking system calls involves the same process. Applications use special processor instructions, e.g. int 0x80 or syscall in the x86 architecture, which transfer control to the trap handler that executes the requested system call. A simplified overview of system call invocation is depicted in Fig. 1.
https://www.sciencedirect.com/science/article/pii/S2666281722000798
Fig. 1. Overview of system call invocation flow.
https://www.sciencedirect.com/science/article/pii/S2666281722000798
⇧ 上記のtrapが、traps.c のことで良いかが分からんけども、kernel側で機能するってことですかね。
ちなみに、
⇧ 上記サイト様によりますと、signalの種類も様々ってことっぽいですね。
■trap
■interrupt
⇧ という違いがあるっぽい。シェルスクリプトで制御できるのは、trapってことになるんかな?
Wikipediaさんの説明によると、
Signals are standardized messages sent to a running program to trigger specific behavior, such as quitting or error handling. They are a limited form of inter-process communication (IPC), typically used in Unix, Unix-like, and other POSIX-compliant operating systems.
⇧ ということらしい。
POSIX準拠の「OS(Operation System)」で利用されてるってことらしいので、Linuxでも利用されてるかと、多分。
Linuxのtrapで捕捉できるシグナルを整理してみる
で、Linuxのシグナルについて、
シグナルID 33から64まではリアルタイムシグナルと呼ばれている。 事前に定義された意味はなく、アプリケーションで定義した用途に使用できる。 ただし33はglibcの内部で使用されており、使えない。
⇧ まとめておられる方がおり、
⇧ 上記でまとめられているらしい。
リアルタイムシグナルを除くと、38個あるのだけど、シグナルIDは31まで採番されてる感じらしい。CPUのアーキテクチャによっては利用できないシグナルとかある影響で、シグナルの数とシグナルIDが一致しないみたいね...
Standard signals | Signal numbering for standard signals | ||||||||
---|---|---|---|---|---|---|---|---|---|
No | Signal | Standard | Action | Comment | x86/ARM most others | Alpha/SPARC | MIPS | PARISC | Notes |
1 | SIGHUP | P1990 | Term | Hangup detected on controlling terminal or death of controlling process | 1 | 1 | 1 | 1 | |
2 | SIGINT | P1990 | Term | Interrupt from keyboard | 2 | 2 | 2 | 2 | |
3 | SIGQUIT | P1990 | Core | Quit from keyboard | 3 | 3 | 3 | 3 | |
4 | SIGILL | P1990 | Core | Illegal Instruction | 4 | 4 | 4 | 4 | |
5 | SIGTRAP | P2001 | Core | Trace/breakpoint trap | 5 | 5 | 5 | 5 | |
6 | SIGABRT | P1990 | Core | Abort signal from abort(3) | 6 | 6 | 6 | 6 | |
7 | SIGIOT | - | Core | IOT trap. A synonym for SIGABRT | 6 | 6 | 6 | 6 | |
8 | SIGBUS | P2001 | Core | Bus error (bad memory access) | 7 | 0 | 0 | 10 | |
9 | SIGEMT | - | Term | Emulator trap | - | 7 | 7 | - | |
10 | SIGFPE | P1990 | Core | Floating-point exception | 8 | 8 | 8 | 8 | |
11 | SIGKILL | P1990 | Term | Kill signal | 9 | 9 | 9 | 9 | |
12 | SIGUSR1 | P1990 | Term | User-defined signal 1 | 10 | 30 | 16 | 16 | |
13 | SIGSEGV | P1990 | Core | Invalid memory reference | 11 | 11 | 11 | 11 | |
14 | SIGUSR2 | P1990 | Term | User-defined signal 2 | 12 | 31 | 17 | 17 | |
15 | SIGPIPE | P1990 | Term | Broken pipe: write to pipe with no readers; see pipe(7) | 13 | 13 | 13 | 13 | |
16 | SIGALRM | P1990 | Term | Timer signal from alarm(2) | 14 | 14 | 14 | 14 | |
17 | SIGTERM | P1990 | Term | Termination signal | 15 | 15 | 15 | 15 | |
18 | SIGSTKFLT | - | Term | Stack fault on coprocessor (unused) | 16 | - | - | 7 | |
19 | SIGCHLD | P1990 | Ign | Child stopped or terminated | 17 | 20 | 18 | 18 | |
20 | SIGCLD | - | Ign | A synonym for SIGCHLD | - | - | 18 | - | |
21 | SIGCONT | P1990 | Cont | Continue if stopped | 18 | 19 | 25 | 26 | |
22 | SIGSTOP | P1990 | Stop | Stop process | 19 | 17 | 23 | 24 | |
23 | SIGTSTP | P1990 | Stop | Stop typed at terminal | 20 | 18 | 24 | 25 | |
24 | SIGTTIN | P1990 | Stop | Terminal input for background process | 21 | 21 | 26 | 27 | |
25 | SIGTTOU | P1990 | Stop | Terminal output for background process | 22 | 22 | 27 | 28 | |
26 | SIGURG | P2001 | Ign | Urgent condition on socket (4.2BSD) | 23 | 16 | 21 | 29 | |
27 | SIGXCPU | P2001 | Core | CPU time limit exceeded (4.2BSD); see setrlimit(2) | 24 | 24 | 30 | 12 | |
28 | SIGXFSZ | P2001 | Core | File size limit exceeded (4.2BSD); see setrlimit(2) | 25 | 25 | 31 | 30 | |
29 | SIGVTALRM | P2001 | Term | Virtual alarm clock (4.2BSD) | 26 | 26 | 28 | 20 | |
30 | SIGPROF | P2001 | Term | Profiling timer expired | 27 | 27 | 29 | 21 | |
31 | SIGWINCH | - | Ign | Window resize signal (4.3BSD, Sun) | 28 | 28 | 20 | 23 | |
32 | SIGIO | - | Term | I/O now possible (4.2BSD) | 29 | 23 | 22 | 22 | |
33 | SIGPOLL | P2001 | Term | Pollable event (Sys V); synonym for SIGIO | Same as SIGIO | ||||
34 | SIGPWR | - | Term | Power failure (System V) | 30 | 29/- | 19 | 19 | |
35 | SIGINFO | - | A synonym for SIGPWR | - | 29/- | - | - | ||
36 | SIGLOST | - | Term | File lock lost (unused) | - | -/29 | - | - | |
37 | SIGSYS | P2001 | Core | Bad system call (SVr4); see also seccomp(2) | 31 | 12 | 12 | 31 | |
38 | SIGUNUSED | - | Core | Synonymous with SIGSYS | 31 | - | - | 31 |
で、肝心のtrapで捕捉できるシグナルはと言うと、
DESCRIPTION
The condition can be EXIT, 0 (equivalent to EXIT), or a signal specified using a symbolic name, without the SIG prefix, as listed in the tables of signal names in the <signal.h> header defined in the Base Definitions volume of POSIX.1‐2017, Chapter 13, Headers; for example, HUP, INT, QUIT, TERM. Implementations may permit names with the SIG prefix or ignore case in signal names as an extension. Setting a trap for SIGKILL or SIGSTOP produces undefined results.
⇧ となっていて、「signal.h」でシグナルの一覧が確認できるらしい。あと、EXIT(数値が0)もtrapで捕捉できるみたいね。
で、「signal.h」でシグナルの一覧はと言うと、
⇧ となっている。
仮に、上記を、trapが捕捉できるシグナルの全量と仮定すると、
signal(7) — Linux manual page Signal numbering for standard signals |
signal.h(0p) — Linux manual page The following signals shall be supported on all implementations |
|||||||
---|---|---|---|---|---|---|---|---|
No | x86/ARM most others SPARC | Alpha/SPARC | MIPS | PARISC | Notes | Signal | Default Action | Description |
1 | 1 | 1 | 1 | 1 | SIGHUP | T | Hangup. | |
2 | 2 | 2 | 2 | 2 | SIGINT | T | Terminal interrupt signal. | |
3 | 3 | 3 | 3 | 3 | SIGQUIT | A | Terminal quit signal. | |
4 | 4 | 4 | 4 | 4 | SIGILL | A | Illegal instruction. | |
5 | 5 | 5 | 5 | 5 | SIGTRAP | A | Trace/breakpoint trap. | |
6 | 6 | 6 | 6 | 6 | SIGABRT | A | Process abort signal. | |
7 | 6 | 6 | 6 | 6 | ||||
8 | 7 | 0 | 0 | 10 | SIGBUS | A | Access to an undefined portion of a memory object. | |
9 | - | 7 | 7 | - | ||||
10 | 8 | 8 | 8 | 8 | SIGFPE | A | Erroneous arithmetic operation. | |
11 | 9 | 9 | 9 | 9 | SIGKILL | T | Kill (cannot be caught or ignored). | |
12 | 10 | 30 | 16 | 16 | SIGUSR1 | T | User-defined signal 1. | |
13 | 11 | 11 | 11 | 11 | SIGSEGV | A | Invalid memory reference. | |
14 | 12 | 31 | 17 | 17 | SIGUSR2 | T | User-defined signal 2. | |
15 | 13 | 13 | 13 | 13 | SIGPIPE | T | Write on a pipe with no one to read it. | |
16 | 14 | 14 | 14 | 14 | SIGALRM | T | Alarm clock. | |
17 | 15 | 15 | 15 | 15 | SIGTERM | T | Termination signal. | |
18 | 16 | - | - | 7 | ||||
19 | 17 | 20 | 18 | 18 | SIGCHLD | I | Child process terminated, stopped, or continued. | |
20 | - | - | 18 | - | ||||
21 | 18 | 19 | 25 | 26 | SIGCONT | C | Continue executing, if stopped. | |
22 | 19 | 17 | 23 | 24 | SIGSTOP | S | Stop executing (cannot be caught or ignored). | |
23 | 20 | 18 | 24 | 25 | SIGTSTP | S | Terminal stop signal. | |
24 | 21 | 21 | 26 | 27 | SIGTTIN | S | Background process attempting read. | |
25 | 22 | 22 | 27 | 28 | SIGTTOU | S | Background process attempting write. | |
26 | 23 | 16 | 21 | 29 | SIGURG | I | High bandwidth data is available at a socket. | |
27 | 24 | 24 | 30 | 12 | SIGXCPU | A | CPU time limit exceeded. | |
28 | 25 | 25 | 31 | 30 | SIGXFSZ | A | File size limit exceeded. | |
29 | 26 | 26 | 28 | 20 | SIGVTALRM | T | Virtual timer expired. | |
30 | 27 | 27 | 29 | 21 | SIGPROF | T | Profiling timer expired. | |
31 | 28 | 28 | 20 | 23 | ||||
32 | 29 | 23 | 22 | 22 | ||||
33 | Same as SIGIO | SIGPOLL | T | Pollable event. | ||||
34 | 30 | 29/- | 19 | 19 | ||||
35 | - | 29/- | - | - | ||||
36 | - | -/29 | - | - | ||||
37 | 31 | 12 | 12 | 31 | SIGSYS | A | Bad system call. | |
38 | 31 | - | - | 31 |
という対応いなるみたい。
概ねのシグナルIDを捕捉できるっぽい、ということで良いんだろうか?
とりあえず、trapで捕捉できるものには、シグナル以外にも、「EXIT(数値で言うと0)」があるっていうのは、要チェックですかね。
基本的には、
よく使うシグナル
⇧ よく使うシグナルは、上記のようなものになってくるようです。
シグナルは数値またはシグナル名で指定します。シグナルの指定に使用できる値は「trap -l」で確認できます。なお、シグナル名のうち冒頭の「SIG」は省略可能です。
【 trap 】コマンド――シグナルを受け取った際の動作を設定する:Linux基本コマンドTips(324) - @IT
⇧ と言うか、「SIG」は省略できるんですね。
DESCRIPTION
The condition can be EXIT, 0 (equivalent to EXIT), or a signal specified using a symbolic name, without the SIG prefix, as listed in the tables of signal names in the <signal.h> header defined in the Base Definitions volume of POSIX.1‐2017, Chapter 13, Headers; for example, HUP, INT, QUIT, TERM. Implementations may permit names with the SIG prefix or ignore case in signal names as an extension. Setting a trap for SIGKILL or SIGSTOP produces undefined results.
⇧ 確かにマニュアルの説明が分かり辛い...
とりあえずは、trapで捕捉するようにするのは、良く使うらしい5個のシグナルとEXITを指定しておけば無難という感じなんですかね。
#!/bin/bash trap [シグナル、ないしは、EXITが捕捉された時に実行したい処理] EXIT HUP INT QUIT TERM # 何かしらの処理
⇧ みたいな感じで、記述しておけば、処理中に上記のシグナルが発生したら、trapが捕捉してくれるってことかと。
シェルスクリプトの処理による、シグナルの発動の起因がいまいちよく分からんので、trapに指定するシグナルの選定のベストプラクティスが不透明なんだが...
毎度モヤモヤ感が半端ない...
今回はこのへんで。