Sending many signals to a Python process crashes the interpreter
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
Bug report
Bug description:
Consider the following simple program (test-breakage.py):
from time import sleep
import os
import signal
class Foreman:
def __init__(self):
signal.signal(signal.SIGUSR1, self.handle_sigusr1)
pid = os.getpid()
print("Test script created, my pid is %s", pid)
with open("/tmp/test-breakage.pid", "w") as f:
f.write(str(pid))
def handle_sigusr1(self, sig, frame):
print("handle_sigusr1")
def run_forever(self):
sleep(3600)
Foreman().run_forever()
Now, a tool to send "a lot" of signal to it:
import os
import sys
import signal
pid = int(sys.argv[1])
iterations = int(sys.argv[2])
for i in range(iterations):
os.kill(pid, signal.SIGUSR1)
Or, if you want the signals to be sent more quickly, implemented in c:
#include <stdlib.h>
#include <signal.h>
int main(int argc, char*argv[]) {
long pid, iterations;
if (argc > 2) {
pid = strtol(argv[1], NULL, 0);
iterations = strtol(argv[2], NULL, 0);
for (int i = 0; i < iterations; i++) {
kill(pid, SIGUSR1);
}
}
return 0;
}
Running these scripts with "sufficiently high" numbers results in various crashes in test-breakage
- Exit with "User defined signal 1" (shouldn't happen, we've defined a handler)
RuntimeErrorwithout any further information- Exit without any printed string
- RuntimeError: reentrant call inside <_io.BufferedWriter name=''>
(In all cases, after repeating "handle_sigusr1" a number of times first)
tested on Linux w. Python 3.10
CPython versions tested on:
3.10
Operating systems tested on:
Linux
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
Start by reproducing the failure with the test-breakage.py signal handler and the Python or C signal-sending scripts on Linux. Compare the reported outcomes under sustained SIGUSR1 delivery; done means the interpreter remains stable and the registered handler continues to behave correctly without the listed crashes or unintended termination.
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- operating-systems
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 42/100