Каждый из touchesBegan...
, touchesMoved...
, touchesEnded...
, touchesCancelled...
имеет набор касаний в качестве входного параметра. Система гарантирует, что у каждого пальца одинаковые UITouch
от начала до конца / отменены.
Прямо сейчас вы обрабатываете только один палец, используя touches.first
. Вместо этого вам нужно нарисовать отдельную линию для каждого прикосновения. Что-то вроде:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
touches.forEach { touch in
line[touch]?.end = touch.location(in: self)
}
setNeedsDisplay()
}
Как отмечено в комментариях к OP, состояние процесса (STAT
) из D
указывает, что процесс находится в "бесперебойном сне" состояние. В реальных терминах это обычно означает, что ожидает на вводе-выводе и может/, делают что-либо - включая смерть - до, который завершает операция ввода-вывода.
Процессы в a D
состояние обычно только будет там для части секунды, прежде чем операция завершится, и они возвращаются к R
/S
. По моему опыту, если процесс застревает в D
, это чаще всего пытается общаться с недостижимым NFS или другой удаленной файловой системой, пытаясь получить доступ к провальному жесткому диску, или используя некоторую часть аппаратных средств посредством облупленного драйвера устройства. В таких случаях единственный способ восстановиться и позволить процессу умирать состоит в том, чтобы или вернуть фс/диск/аппаратные средства и работающий, таким образом, ввод-вывод может завершиться или сдаваться и перезагружать систему. В конкретном случае NFS монтирование может также в конечном счете время туда и обратно от операции ввода-вывода (с кодом неисправности), но это зависит от опций монтирования, и это очень характерно для NFS, монтируется, чтобы быть установленным ожидать навсегда.
Это отлично от процесса-зомби, который будет иметь состояние Z
.
Действительно ли это возможно, что этот процесс перезапущен (например, init) просто в то время, когда Вы уничтожаете его?
Можно проверить это легко. Если PID является тем же после kill -9 PID
затем процесс не был уничтожен, но если он изменился, процесс был перезапущен.
PS-ef | grep Firefox; и Вы видите 3 процесса, уничтожаете их всех.
sudo killall -9 firefox
Должен работать
Править: [PID] изменяется на Firefox
Перепроверка, что родительский идентификатор равняется действительно 1. В противном случае и это firefox
, сначала попробуйте sudo killall -9 firefox-bin
. После этого попытайтесь уничтожить определенные идентификаторы процесса индивидуально с sudo killall -9 [process-id]
.
Как для процесса даже возможно не послушать для уничтожения-9 (ни как пользователь, ни как корень)?
Если процесс пошел <defunct>
и затем становится зомби с родителем 1, Вы не можете уничтожить его вручную; только init
может. Процессы-зомби являются уже давно умершими - они потеряли способность, которая будет уничтожена, поскольку они больше не процессы, только запись таблицы процессов и ее связанный код выхода, ожидая, чтобы быть собранными. Необходимо уничтожить родителя, и Вы не можете уничтожить init
по очевидным причинам.
Но посмотрите здесь для более общей информации. Перезагрузка уничтожит все, естественно.
Можно также сделать pstree и уничтожить родителя. Это удостоверяется, что Вы получаете все незаконное дерево процесса и не только лист.