Как быть, если к вам в офис пришли какие-то враги (например, лиц-шмональщики), и застали вас в процессе работы за компьютером, на котором уже введены все секретные пароли, запущены нелицензионные программы, открыты секретные документы?
Самый простой и надёжный способ — перезагрузить сразу все компьютеры, сделав вид будто это какой-то случайный ужасный сбой, а вовсе не принятие мер безопасности. Эта небольшая статья — о том, как вызвать такой «сбой».
СПОСОБ ПЕРВЫЙ — ЭЛЕКТРИЧЕСКИЙ.
Самый простой, надёжный и жестокий способ — электрический. Просто замкните электропроводку — вылетят пробки, офис будет надёжно обесточен. Чтобы вызвать надёжное короткое замыкание лучше подготовиться заранее, проявив фантазию в создании короткозамкнутых приборов. Это может быть что угодно: «неисправный» электрочайник, «проблемная» электролампочка, «сломаный» удлинитель, и так далее. Это может быть просто «включатель света» на стене, или какая-нибудь «недоделанная проводка», которую можно «нечаянно» задеть ногой… В общем, здесь полный простор для фантазии. Главное — не забывать про источники бесперебойного питания.
Глупо обесточивать офис, если у каждого компьютера стоит UPS. Если вы заботитесь о безопасности, то не поленитесь заранее протянуть в своём офисе отдельную проводку специально для питания компьютеров, завести её всю на один хороший мощный UPS. Во-первых, такая схема — надёжнее, правильнее, легче в обслуживании, по сравнению с той схемой, когда у каждого компа стоит персональный UPS.
Во-вторых, вы получаете прекрасную возможность отрубать питание у всех компьютеров сразу. Либо закоротив проводку (хороший UPS при этом уйдёт в защиту), либо просто отключив линию питания.
ВТОРОЙ СПОСОБ — ПЕРЕЗАГРУЗКА ПО СЕТИ.
Гораздо менее жестоким способом перезагрузки компьютеров является подача через локальную сеть команды о перезагрузке. На практике это реализуется следующим образом:
на всех компьютерах устанавливается специальный ярлычок, при нажатии на который происходит перезагрузка всех компьютеров в офисе. Как только выясняется, что «волк в домике!» кто-то из сотрудников (кто угодно, или несколько сразу) вызывают этот магический ярлычок кликнув иконку на своём компе, либо нажав определённое сочетание клавиш. После этого все компы сами по себе начинают перезагружаться, все пароли исчезают, все документы закрываются. Можно при этом даже театрально всплеснуть руками «ОЙ блин у меня компьютер ОПЯТЬ САМ ПЕРЕЗАГРУЗИЛСЯ!!! Да сколько ж можно!»
Команда удалённой перезагрузки очень простая:
shutdown -r -f -t 0 -m \имя-или-айпи-адрес-компа.
например, чтобы перезагрузить server1 надо выполнить
shutdown -r -f -t 0 -m \server1
параметры:
-r означает что компьютер будет перезагружен (если поставить -s то будет выключен)
-f означает принудительное завершение открытых программ.
-t 0 означает время ожидания перед перезагрузкой в секундах, ноль — то есть нисколько не ждать.
-m имя — указание удалённого компьютера в сети, на который посылается команда. Если не указан этот ключ то команда адресуется к локальному компьютеру
Просмотреть хелп команды можно набрав shutdown /?
Теперь ВАЖНЫЙ момент: у текущего пользователя может не хватить прав доступа на выключение соседнего компьютера или сервера. Это лечится вот какой командой:
runas /env /user:Admin1 /savecred «shutdown -r -f -t 0 -m \COMP»
Команда runas предназначена для запуска процессов от имени другого пользователя.
Вместо COMP надо подставить имя компьютера, вместо Admin1 — имя юзера, имеющего права администратора на компьютере COMP и как минимум права юзера на компьютере, с которого осуществляется вызов команды. Разумеется, и на том и на другом компьютере пароль для этого имени должен быть одинаковым.
-Самый простой вариант — использовать одно имя администратора и один пароль для всех компьютеров, тогда запутаться становится совершенно невозможно.
-Самый сложный вариант — если не хочется раздавать направо-налево права администратора, тогда можно создать на каждом компьютере специального юзера, дать ему ограниченные права, достаточные только для перезагрузки компьютеров — но это задачка скорее для сисадмина, нежели для рядового пользователя.
-Если компьютеры включены в домен, то проще всего во всех командах использовать учётку доменного администратора, либо использовать специального доменного юзера с правами на перезагрузку любого компьютера.
-Поясняю параметр /savecred , он предназначен для того, чтобы не требовалось вводить пароль каждый раз. Достаточно ввести пароль один раз, после этого система его запоминает, а в следующий раз команда выпонится уже без запроса пароля, на основе запомненных данных.
Вцелом скрипт массовой перезагрузки может выглядеть примерно так:
runas /env /user:Admin1 /savecred «shutdown -r -f -t 0 -m \COMP1»
runas /env /user:Admin2 /savecred «shutdown -r -f -t 0 -m \COMP2»
runas /env /user:Admin3 /savecred «shutdown -r -f -t 0 -m \COMP3»
…
и так далее, по количествку компов.
Однако, при таком способе команды будут вызываться последовательно, то есть команда на перезагрузку последнего компьютера будет подана гораздо позже чем команда на перезагрузку первого компьютера в списке. Это тоже можно вылечить. Достаточно дописать в начале каждой команды магическое слово start и тогда все команды запустятся параллельно. То есть итоговый скрипт тотальной перезагрузки всех компьютеров будет выглядеть примерно так:
start runas /env /user:Admin /savecred «shutdown -r -f -t 0 -m \COMP1»
start runas /env /user:Admin /savecred «shutdown -r -f -t 0 -m \COMP2»
start runas /env /user:Admin /savecred «shutdown -r -f -t 0 -m \COMP3»
Удачных экспериментов, дамы и господа!
p.s. иногда встречаются такие версии винды, которые упорно не желают воспринимать команду перезагрузки по сети. Чтобы это вылечить надо, во-первых, проверить настройку безопасности, которая отвечает за правила сетевой авторизации пользователей. В XP найти это можно так: открываем Control Panel -> Administrative tools -> Local Security Policy
Там ищем такую настройку:
Local Policies -> Security Options ->
Network access: Sharing and security model for local accounts
там надо включить режим «Classic» вместо «Guest only».
(по русски — Паналь управления -> Администрирование
Локальные параметры безопасности
Локальные политики -> Параметры безопасности ->
Сетевой доступ: модель совместного доступа… — здесь по умолчанию включено «Гостевая», надо включить «Обычная».
(если компьютеры в домене то делать это скорее всего не потребуется).
Разумеется, все компьютеры, которые мы хотим перезагружать через сеть, должны быть не зафаерволены от доступа из локальной сети!
Решив проблему доступа через локальную сеть все остальные препятствия можно преодолеть через использование утилиты psexec. Команда на удалённую перезагрузку в этом случае будет выглядеть так:
psexec \IP -u Administrator -p password shutdown -r -f -t 0
Вместо IP подставляем IP-адрес компьютера, который отправляем в перезагрузку. Вместо Administrator и password — подставляем соответственно логин и пароль администратора того компьютера.
p.p.s. Волшебную утилиту psexec можно скачать прямо с майкрософта:
[внешняя ссылка]
p.p.p.s. Ещё можно по аналогии создать менее злую командочку, которая вместо перезагрузки просто автоматически лочит все компы. Тоже очень полезно в случае проверки — залоченость компов даёт некоторое время на принятие дальнейших решений. Если «волки» не знают паролей то для входа им понадобится либо выпытывать пароли у юзеров, либо требовать разлочить систему. А это всё драгоценное время, за которое можно принять какие-то меры.
Чтобы залочить комп по сети, достаточно выполнить следующую командочку (опять же с помошью утилиты psexec):
psexec \IP -u Administrator -p password rundll32.exe user32.dll,LockWorkStation
Можете поиграться с залочиванием компьютера своего соседа
Если компьютеры находятся в домене, а вы имеете права администратора домена, попробуйте выполнить:
FOR %I IN (список) DO start psexec \сетка.%I rundll32.exe user32.dll,LockWorkStation
где «сетка» — это начальные цифры IP-адреса вашей локальной сети, например, 192.168.0
ну а «список» — это последние цифры IP-адресов, через запятую.
Например, чтобы залочить компютеры с IP-адресами 192.168.0.5, 192.168.0.20 и 192.168.0.55 надо написать так:
FOR %I IN (5,20,55) DO start psexec \192.168.0.%I rundll32.exe user32.dll,LockWorkStation
Version:
- os: centos 7.4 x64
- redis: 5.0.7
Conf:
redis
bind 0.0.0.0
port 7003
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised systemd
pidfile /var/run/redis_7003.pid
loglevel notice
logfile /data/redis/7003/log/redis_7003.log
databases 16
save ""
maxclients 10000
maxmemory 512MB
maxmemory-policy volatile-ttl
dir /data/redis/7003/data
requirepass 123456
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
systemd
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
Type=notify
ExecStart=/usr/local/redis/bin/redis-server /data/redis/7003/conf/redis.conf --supervised systemd
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/usr/local/redis/bin/redis-cli -p 7003 -a 123456 shutdown;
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
Restart=on-failure
LimitNOFILE=10240
[Install]
WantedBy=multi-user.target
Step
- redis systemd status
[root@node130 ~]# systemctl status redis7003 ● redis7003.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis7003.service; enabled; vendor preset: disabled) Active: active (running) since 五 2020-01-17 17:35:35 CST; 27s ago Main PID: 8167 (redis-server) Tasks: 4 Memory: 6.6M CGroup: /system.slice/redis7003.service └─8167 /usr/local/redis/bin/redis-server 0.0.0.0:7003 [cluster] 1月 17 17:35:35 node130 systemd[1]: Starting Redis persistent key-value database... 1月 17 17:35:35 node130 systemd[1]: Started Redis persistent key-value database.
- exec shutdown
[root@node130 ~]# redis-cli -p 7003 -a 123456 shutdown Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. [root@node130 ~]# echo $? 0
command exit 0
- redis systemd status
[root@node130 ~]# systemctl status redis7003 ● redis7003.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis7003.service; enabled; vendor preset: disabled) Active: active (running) since 五 2020-01-17 17:36:16 CST; 1s ago Process: 8176 ExecStop=/usr/local/redis/bin/redis-cli -p 7003 -a 123456 shutdown; (code=exited, status=1/FAILURE) Main PID: 8181 (redis-server) Tasks: 4 Memory: 6.7M CGroup: /system.slice/redis7003.service └─8181 /usr/local/redis/bin/redis-server 0.0.0.0:7003 [cluster] 1月 17 17:36:16 node130 systemd[1]: Starting Redis persistent key-value database... 1月 17 17:36:16 node130 systemd[1]: Started Redis persistent key-value database.
status FAILURE, restart redis.
- /var/log/message
[root@node130 ~]# tail /var/log/messages Jan 17 17:35:35 node130 systemd: Started Redis persistent key-value database. Jan 17 17:36:16 node130 redis-cli: Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. Jan 17 17:36:16 node130 redis-cli: Could not connect to Redis at 127.0.0.1:7003: Connection refused Jan 17 17:36:16 node130 systemd: redis7003.service: control process exited, code=exited status=1 Jan 17 17:36:16 node130 systemd: Unit redis7003.service entered failed state. Jan 17 17:36:16 node130 systemd: redis7003.service failed. Jan 17 17:36:16 node130 systemd: redis7003.service holdoff time over, scheduling restart. Jan 17 17:36:16 node130 systemd: Stopped Redis persistent key-value database. Jan 17 17:36:16 node130 systemd: Starting Redis persistent key-value database... Jan 17 17:36:16 node130 systemd: Started Redis persistent key-value database.
I don’t know why it returns this error.
What is Exit Code 1
Exit Code 1 indicates that a container shut down, either because of an application failure or because the image pointed to an invalid file. In a Unix/Linux operating system, when an application terminates with Exit Code 1, the operating system ends the process using Signal 7, known as SIGHUP.
In Kubernetes, container exit codes can help you diagnose issues with pods. If a pod is unhealthy or frequently shuts down, you can diagnose the problem using the command kubectl describe pod [POD_NAME]
If you see containers terminated with Exit Code 1, you’ll need to investigate the container and its applications more closely to see what caused the failure. We’ll provide several techniques for diagnosing and debugging Exit Code 1 in containers.
Why Do Exit Code 1 Errors Occur
Exit Code 1 means that a container terminated, typically due to an application error or an invalid reference.
An application error is a programming error in any code running within the container. For example, if a Java library is running within the container, and the library throws a compiler error, the container might terminate with Exit Code 1.
An invalid reference is a file reference in the image used to run the container, which points to a nonexistent file.
What is Signal 7 (SIGHUP)?
In Unix or Linux operating systems, signals help manage the process lifecycle. When a container terminates with Exit Code 1, the operating system terminates the container’s process with Signal 7.
Signal 7 is also known as SIGHUP – a term that originates from POSIX-compliant terminals. In old terminals based on the RS-232 protocol, SIGHUP was a “hang up” indicating the terminal has shut down.
To send Signal 7 (SIGHUP) to a Linux process use the following command:
kill - HUB [processID]
Diagnosing Exit Code 1Checking Exit Codes in Kubernetes
Diagnosing Exit Code 1
When a container exits, the container engine’s command-line interface (CLI) displays a line like this. The number in the brackets is the Exit Code.
Exited (1)
To list all containers that exited with an error code or didn’t start correctly:
If you are using Docker, run ps -la
To diagnose why your container exited, look at the container engine logs:
- Check if a file listed in the image specification was not found. If so, the container probably exited because of this invalid reference.
- If there are no invalid references, check the logs for a clue that might indicate which library within the container caused the error, and debug the library.
Checking Exit Codes in Kubernetes
If you are running containers as part of a Kubernetes cluster, you can find the exit code by gathering information about a pod.
Run the kubectl describe pod [POD_NAME]
command.
The result will look something like this:
Containers: kubedns: Container ID: ... Image: ... ... State: Running Started: Fri, 15 Oct 2021 12:06:01 +0800 Last State: Terminated Reason: Error Exit Code: 1 Started: Mon, 8 Nov 2021 22:21:42 +0800 Finished: Mon, 8 Nov 2021 23:07:17 +0800 Ready: True Restart Count: 1
DIY Troubleshooting Techniques
1. Delete And Recreate the Container
It is a good idea to start your troubleshooting by recreating the container. This can clean out temporary files or other transient conditions that may be causing the error. Deleting and recreating will run the container with a fresh file system.
To delete and recreate the container:
- In Docker, use the docker stop command to stop the container, then use docker rm to completely remove the container. Rebuild the container using docker run
- In Kubernetes, you can manually kill the pod that runs your container using
kubectl delete pod [pod-name]
. You can then wait for Kubernetes to automatically restart your pod (depending on your setup), or manually restart the pod usingkubectl run [pod-name] --image=[image-name]
2. Bashing Into a Container To Troubleshoot Applications
If your container does not use entrypoints, and you suspect Exit Code 1 is caused by an application problem, you can bash into the container and try to identify which application is causing it to exit.
To bash into the container and troubleshoot applications:
- Bashing into the container using the following command:
docker run -ti --rm ${image} /bin/bash
- You should now be running in a shell within the container. Run the application you suspect is causing the problem and see if it exits
- If the application exits, check the application’s logs and see if it exited due to an application error, and what was the error
Note: Another way to troubleshoot an application is to simply run the application, with the same command line, outside the container. For this to be effective, you need to have an environment similar to that inside the container on the local machine.
3. Experimenting With Application Parameters
Exit Code 1 is often caused by application errors that cause the application, and the entire container, to exit. If you determine that Exit Code 1 is caused by an application, you can experiment with various configuration options of the application to prevent it from exiting.
Here is a partial list of application parameters you can try:
- Allocate more memory to the application
- Run the application without special switches or flags
- Make sure that the port the application uses is exposed to the relevant network
- Change the port used by the application
- Change environment variables
- Check for compatibility issues between the application and other libraries, or the underlying operating system
4. Addressing the PID 1 Problem
Some Exit 1 errors are caused by the PID 1 problem. In Linux, PID 1 is the “init process” that spawns other processes and sends signals.
Ordinarily, the container runs as PID 2, immediately under the init process, and additional applications running on the containers run as PID 3, 4, etc. If the application running on the container runs as PID 2, and the container itself as PID 3, the container may not terminate correctly.
To identify if you have a PID 1 problem
- Run
docker ps -a
or the corresponding command in your container engine. Identify which application was running on the failed container. - Rerun the failed container. While it is running, in the system shell, use the command
ps -aux
to see currently running processes. The result will look something like this. You can identify your process by looking at the command at the end.PID USER PR NI VIRT RES %CPU %MEM TIME+ S COMMAND 1 root 20 0 1.7m 1.2m 2.0 0.5 0:05.04 S {command used to run your application}
- Look at the PID and USER at the beginning of the failing process. If PID is 1, you have a PID 1 problem.
Possible solutions for the PID 1 problem
- If the container will not start, try forcing it to start using a tool like
tini
ordumb-init
- If you are using
docker-compose
, add the init parameter todocker-compose.yml
- If you are using K8s, run the container using Share Process Namespace (PID 5)
These four techniques are only some of the possible approaches to troubleshooting and solving the Exit Code 1 error. There are many possible causes of Exit Code 1 which are beyond our scope, and additional approaches to resolving the problem.
Troubleshooting Kubernetes Exit Codes with Komodor
As a Kubernetes administrator or user, pods or containers terminating unexpectedly can be a pain and can result in severe production issues.
Exit Code 1 is a prime example of how difficult it can be to identify a specific root cause in Kubernetes because many different problems can cause the same error. The troubleshooting process in Kubernetes is complex and, without the right tools, can be stressful, ineffective, and time-consuming.
Komodor is a Kubernetes troubleshooting platform that turns hours of guesswork into actionable answers in just a few clicks. Using Komodor, you can monitor, alert and troubleshoot exit code 1
event.
For each K8s resource, Komodor automatically constructs a coherent view, including the relevant deploys, config changes, dependencies, metrics, and past incidents. Komodor seamlessly integrates and utilizes data from cloud providers, source controls, CI/CD pipelines, monitoring tools, and incident response platforms.
- Discover the root cause automatically with a timeline that tracks all changes in your application and infrastructure.
- Quickly tackle the issue, with easy-to-follow remediation instructions.
- Give your entire team a way to troubleshoot independently without escalating.
Эта ошибка встречается очень редко, и если вы столкнулись с ней, значит, вы не можете открыть командную строку. Командная строка также известна как cmd, вы можете открыть командную строку из команды run, набрав cmd. Командная строка позволяет запускать несколько команд, а также создавать пакетные файлы для автоматизации нескольких основных задач. Вы можете эффективно использовать командную строку, создав сценарий пакетного файла и автоматизировав его с помощью планировщика задач. Командная строка — это очень мощный инструмент по сравнению с приложениями с графическим пользовательским интерфейсом, кроме того, команды командной строки дают нам прямую линию связи с операционной системой. Вы можете открыть командную строку многими способами, но когда вы сталкиваетесь с этой проблемой, то, сколько бы вы ни пытались, вы не можете открыть командную строку. Недавно в нашей организации один пользователь столкнулся с этой проблемой командной строки, он не мог открыть cmd. Мы перепробовали все возможные способы решения этой проблемы, но следующий метод устранения неполадок помог решить проблему. Следуйте этому руководству, чтобы исправить ошибку cmd Process exited with Code 1 в Windows 11/10.
Содержание
- Что вызывает ошибку Process exited with Code 1?
- Исправление cmd Процесс завершился с ошибкой Code 1:
- Решение 1: Выполните команду:
- Удаление ключа реестра вручную:
- Решение 2: Пересоздайте профиль пользователя и проверьте:
- YouTube video: Исправить ошибку cmd Процесс завершился с кодом 1 в Windows 11/10
Что вызывает ошибку Process exited with Code 1?
В основном эта ошибка возникает у пользователей, которые установили Anaconda на свои системы, Anaconda поставляется с собственным приглашением Anaconda вместе со многими другими инструментами. Даже удаление Anaconda не устраняет проблему, потому что путь к реестру остается прежним.
Исправление cmd Процесс завершился с ошибкой Code 1:
Если вы получили эту ошибку, есть только два решения для устранения этой проблемы, сначала следуйте первому методу решения, если это не устраняет проблему, то попробуйте воссоздать профиль пользователя в качестве окончательного решения.
Решение 1: Выполните команду:
Откройте PowerShell в режиме повышения и выполните следующую команду и нажмите enter.
8199
Эта команда откроет редактор реестра и удалит указанный путь реестра, HKCUSoftwareMicrosoftCommand ProcessorAutoRun.
После успешного выполнения команды перезагрузите систему один раз. В большинстве случаев это устранит проблему.
Удаление ключа реестра вручную:
Откройте команду run, нажав Windows + R и введите Regedit и нажмите enter, эта команда откроет консоль редактора реестра.
Теперь перейдите по следующему пути.
HKCUSoftwareMicrosoftCommand ProcessorAutoRun
Нажмите правой кнопкой мыши на AutoRun и выберите Delete , после удаления просто перезагрузите систему один раз.
Решение 2: Пересоздайте профиль пользователя и проверьте:
Если вы являетесь пользователем входа в домен, то пересоздание профиля пользователя устранит эту проблему. Перейдите по ссылке здесь, чтобы узнать, как удалить профиль пользователя и создать его заново. Если вы используете учетную запись локального пользователя, то вы можете выполнить следующие шаги для воссоздания профиля пользователя.
Откройте команду Run и введите lusrmgr.msc и нажмите enter, эта команда откроет консоль Local users and Groups.
Нажмите на users, щелкните правой кнопкой мыши и создайте новую учетную запись администратора.
YouTube video: Исправить ошибку cmd Процесс завершился с кодом 1 в Windows 11/10
.
Updated January 2023: Stop getting error messages and slow down your system with our optimization tool. Get it now at this link
- Download and install the repair tool here.
- Let it scan your computer.
- The tool will then repair your computer.
Several VirtualBox users have encountered the error “Virtual Machine unexpectedly shut down when started with exit code 1 (0x1)” when trying to open the virtual machine. The affected users report that they encounter this error on several virtual machines (including any new ones they are trying to create). This particular problem has been confirmed in Windows 7, Windows 8.1 and Windows 10.
If you are currently having trouble solving this particular problem, you can use one of the following methods to solve the problem. Here are some fixes that other users have used in a similar situation to solve the problem.
Remove a saved state
If you have crashed the virtual machine and saved the state of the virtual machine, the state of the virtual machine may be damaged. Go and clear the saved status. Then make sure that the “Virtual Machine session failed to open” session is allowed. Do it:
- Right-click on the virtual machine and select “Cancel the saved status”.
- Then try to start the virtual machine. If the problem persists, continue using the method described below.
Delete and reinstall VirtualBox
The next way to fix the most common way to solve the “Failed to log in for VirtualBox” problem is to uninstall and then reinstall the VirtualBox application, especially if the problem occurred after the update. Windows.
- Go to Control Panel and uninstall VirtualBox. (Do not worry, the virtual machines will remain intact).
- Reboot your computer.
- Download the latest version of VirtualBox.
4 Right-click the file you have downloaded and select “Run as administrator”. - Follow the on-screen instructions to install VirtualBox.
After installation, restart your computer. - Open VirtualBox Manager and start the virtual machine.
- If the virtual machine opens correctly, install the guest add-ons and extension package (if necessary).
January 2023 Update:
You can now prevent PC problems by using this tool, such as protecting you against file loss and malware. Additionally it is a great way to optimize your computer for maximum performance.
The program fixes common errors that might occur on Windows systems with ease — no need for hours of troubleshooting when you have the perfect solution at your fingertips:
- Step 1 : Download PC Repair & Optimizer Tool (Windows 10, 8, 7, XP, Vista – Microsoft Gold Certified).
- Step 2 : Click “Start Scan” to find Windows registry issues that could be causing PC problems.
- Step 3 : Click “Repair All” to fix all issues.
Disable the virus protection program while the virtual machine is running.
Another common reason that causes the error “Virtual machine unexpectedly shuts down at startup with an output code 1 (0x1)” is an external anti-virus package (a security option other than Windows Protector).
Several users who used a third-party security package, reported that the error does not occur when the real-time antivirus protection is disabled. Actions to disable protection in real time are specific for each third-party antivirus. However, you can usually disable it by right-clicking the icon in the taskbar and using the context menu.
Run the virtual machine in headless mode
If you are worried about opening a large number of windows when running multiple virtual machines on a Windows server or workstation, use VirtualBox command line tools to run them headless. You can also manage these virtual machines using Microsoft Terminal Server Connection (mstsc.exe) or SSH access (if enabled).
- Configure the environment variables of the virtual machine.
In the command line window, do the following:
- VBoxManage modifyvm “VM-Name” – vrdeextpack by default
- VBoxManage modifyvm “Virtual machine name” –vrde on
- VBoxManage modifyvm “VM Name” –vrdeport 3391
- VBoxManage modifyvm “VM-Name” –vrdeaddress 127.0.0.2
- Run the guest virtual machine offline.
This command displays on the terminal the guest virtual machine startup errors.
VBoxHeadless –startvm “VM Name”.
Alternative order
VBoxManage startvm “VM Name” – headless type
- Start the Microsoft RDP viewer.
mstsc /v:127.0.0.2:3391
Expert Tip: This repair tool scans the repositories and replaces corrupt or missing files if none of these methods have worked. It works well in most cases where the problem is due to system corruption. This tool will also optimize your system to maximize performance. It can be downloaded by Clicking Here
CCNA, Web Developer, PC Troubleshooter
I am a computer enthusiast and a practicing IT Professional. I have years of experience behind me in computer programming, hardware troubleshooting and repair. I specialise in Web Development and Database Design. I also have a CCNA certification for Network Design and Troubleshooting.
Post Views: 126
Closed
Bug 877362
Opened 10 years ago
Closed 10 years ago
Categories
(Core :: Audio/Video, defect)
Tracking
()
People
(Reporter: RyanVM, Assigned: baku)
References
Details
(Keywords: assertion, crash, intermittent-failure)
https://tbpl.mozilla.org/php/getParsedLog.php?id=23533420&tree=Fx-Team Rev5 MacOSX Mountain Lion 10.8 fx-team debug test mochitest-1 on 2013-05-29 08:26:31 PDT for push 008e4e53a4ff slave: talos-mtnlion-r5-045 08:53:20 INFO - JS Component Loader: ERROR chrome://global/content/BrowserElementChildPreload.js:268 08:53:20 INFO - TypeError: content is null 08:53:20 INFO - [Parent 902] WARNING: NS_ENSURE_TRUE(mDB) failed: file ../../../netwerk/cache/nsDiskCacheDeviceSQL.cpp, line 1395 08:53:20 INFO - [Parent 902] WARNING: NS_ENSURE_TRUE(mThread != PR_GetCurrentThread()) failed: file ../../../xpcom/threads/nsThread.cpp, line 446 08:53:20 INFO - [Parent 902] WARNING: nsExceptionService ignoring thread destruction after shutdown: file ../../../xpcom/base/nsExceptionService.cpp, line 167 08:53:20 INFO - [Parent 902] WARNING: nsAppShell::Exit() called redundantly: file ../../../widget/cocoa/nsAppShell.mm, line 757 08:53:20 INFO - --DOCSHELL 0x145efa320 == 3 [id = 693] 08:53:20 INFO - [Parent 902] WARNING: NS_ENSURE_TRUE(mMainThread) failed: file ../../../xpcom/threads/nsThreadManager.cpp, line 256 08:53:20 INFO - [Parent 902] WARNING: NS_ENSURE_TRUE(mMainThread) failed: file ../../../xpcom/threads/nsThreadManager.cpp, line 256 08:53:20 INFO - --DOMWINDOW == 21 (0x1540d6010) [serial = 4870] [outer = 0x12625bad0] [url = http://mochi.test:8888/tests/content/xml/document/test/test_bug445330.html] 08:53:20 INFO - --DOCSHELL 0x112d9f910 == 2 [id = 5] 08:53:20 INFO - --DOCSHELL 0x15f061280 == 1 [id = 736] 08:53:20 INFO - --DOCSHELL 0x111427780 == 0 [id = 2] 08:53:20 INFO - [Parent 902] ###!!! ABORT: You can't dereference a NULL nsCOMPtr with operator->().: 'mRawPtr != 0', file ../../../../dist/include/nsCOMPtr.h, line 839 08:53:20 INFO - mozilla::dom::HTMLMediaElement::Pause(mozilla::ErrorResult&) [content/html/content/src/HTMLMediaElement.cpp:1468] 08:53:20 INFO - mozilla::dom::HTMLMediaElement::Pause() [obj-firefox/dist/include/mozilla/ErrorResult.h:105] 08:53:20 INFO - mozilla::dom::HTMLMediaElement::UnbindFromTree(bool, bool) [content/html/content/src/HTMLMediaElement.cpp:2381] 08:53:20 INFO - mozilla::dom::Element::UnbindFromTree(bool, bool) [content/base/src/Element.cpp:1325] 08:53:20 INFO - nsGenericHTMLElement::UnbindFromTree(bool, bool) [content/html/content/src/nsGenericHTMLElement.cpp:656] 08:53:20 INFO - mozilla::dom::Element::UnbindFromTree(bool, bool) [content/base/src/Element.cpp:1325] 08:53:20 INFO - nsGenericHTMLElement::UnbindFromTree(bool, bool) [content/html/content/src/nsGenericHTMLElement.cpp:656] 08:53:20 INFO - mozilla::dom::HTMLSharedElement::UnbindFromTree(bool, bool) [/builds/slave/m-in-osx64-d-00000000000000000/build/obj-firefox/content/html/content/src/../../../../dist/include/nsINodeInfo.h:280] 08:53:20 INFO - nsDocument::cycleCollection::UnlinkImpl(void*) [content/base/src/nsDocument.cpp:1824] 08:53:20 INFO - nsHTMLDocument::cycleCollection::UnlinkImpl(void*) [obj-firefox/dist/include/nsAutoPtr.h:865] 08:53:20 INFO - nsCycleCollector::CollectWhite(nsICycleCollectorListener*) [xpcom/base/nsCycleCollector.cpp:2417] 08:53:20 INFO - nsCycleCollector::FinishCollection(nsICycleCollectorListener*) [xpcom/base/nsCycleCollector.cpp:2883] 08:53:20 INFO - nsCycleCollector::ShutdownCollect(nsICycleCollectorListener*) [xpcom/base/nsCycleCollector.cpp:2759] 08:53:20 INFO - nsCycleCollector::Shutdown() [obj-firefox/dist/include/nsCOMPtr.h:532] 08:53:20 INFO - nsCycleCollector_shutdown() [xpcom/base/nsCycleCollector.cpp:2543] 08:53:20 INFO - mozilla::ShutdownXPCOM(nsIServiceManager*) [xpcom/glue/nsCOMPtr.h:820] 08:53:20 INFO - ScopedXPCOMStartup::~ScopedXPCOMStartup() [toolkit/xre/nsAppRunner.cpp:1126] 08:53:20 INFO - XREMain::XRE_main(int, char**, nsXREAppData const*) [obj-firefox/dist/include/mozilla/mozalloc.h:225] 08:53:20 INFO - XRE_main [toolkit/xre/nsAppRunner.cpp:4142] 08:53:20 INFO - main [browser/app/nsBrowserApp.cpp:272] 08:53:20 INFO - [Parent 902] ###!!! ABORT: You can't dereference a NULL nsCOMPtr with operator->().: 'mRawPtr != 0', file ../../../../dist/include/nsCOMPtr.h, line 839 08:53:23 WARNING - TEST-UNEXPECTED-FAIL | Shutdown | Exited with code 1 during test run 08:53:23 INFO - INFO | automation.py | Application ran for: 0:24:31.496776 08:53:23 INFO - INFO | zombiecheck | Reading PID log: /var/folders/np/253ng38x5ln5h1fwm2gjh92h00000w/T/tmpGv6eUnpidlog 08:53:34 WARNING - PROCESS-CRASH | Shutdown | application crashed [@ mozalloc_abort(char const*)] 08:53:34 INFO - Crash dump filename: /var/folders/np/253ng38x5ln5h1fwm2gjh92h00000w/T/tmpxM5Ig5/minidumps/C29AE555-86FD-4D7C-8E8B-CDE0ABA9AC33.dmp 08:53:34 INFO - Operating system: Mac OS X 08:53:34 INFO - 10.8.0 12A269 08:53:34 INFO - CPU: amd64 08:53:35 INFO - family 6 model 42 stepping 7 08:53:35 INFO - 8 CPUs 08:53:35 INFO - Crash reason: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS 08:53:35 INFO - Crash address: 0x0 08:53:35 INFO - Thread 0 (crashed) 08:53:35 INFO - 0 libmozalloc.dylib!mozalloc_abort(char const*) [mozalloc_abort.cpp : 30 + 0x0] 08:53:35 INFO - rbx = 0x00007fff7582ec68 r12 = 0x000000010379faf8 08:53:35 INFO - r13 = 0x000000010384b3e0 r14 = 0x00007fff5fbf6860 08:53:35 INFO - r15 = 0x00007fff7582ec68 rip = 0x00000001000b2aa4 08:53:35 INFO - rsp = 0x00007fff5fbf6810 rbp = 0x00007fff5fbf6820 08:53:35 INFO - Found by: given as instruction pointer in context 08:53:35 INFO - 1 XUL!NS_DebugBreak [nsDebugImpl.cpp : 387 + 0x7] 08:53:35 INFO - rip = 0x0000000102b80312 rsp = 0x00007fff5fbf6840 08:53:35 INFO - Found by: stack scanning 08:53:35 INFO - 2 XUL!nsHttpDigestAuth::GenerateCredentials(nsIHttpAuthenticableChannel*, char const*, bool, unsigned short const*, unsigned short const*, unsigned short const*, nsISupports**, nsISupports**, unsigned int*, char**)::hexChar + 0x15ed4 08:53:35 INFO - rip = 0x0000000103796505 rsp = 0x00007fff5fbf6848 08:53:35 INFO - Found by: stack scanning
https://tbpl.mozilla.org/php/getParsedLog.php?id=23534054&tree=Fx-Team 09:02:03 INFO - 5 XUL!mozilla::dom::HTMLLinkElement::Release() [HTMLLinkElement.cpp : 53 + 0x19] 09:02:03 INFO - rip = 0x00000001019c8bb4 rsp = 0x00007fff5fbf6970 09:02:03 INFO - Found by: stack scanning 09:02:03 INFO - 6 XUL!nsStyleLinkElement::DoUpdateStyleSheet(nsIDocument*, nsICSSLoaderObserver*, bool*, bool*, bool) [nsCOMPtr.h : 534 + 0x5] 09:02:03 INFO - rip = 0x0000000101856835 rsp = 0x00007fff5fbf6990 09:02:03 INFO - Found by: stack scanning 09:02:03 INFO - 7 XUL!nsDependentString::nsDependentString(unsigned short const*, unsigned int) [nsTString.h:008e4e53a4ff : 371 + 0x4] 09:02:03 INFO - rip = 0x00000001010071f3 rsp = 0x00007fff5fbf69a0 09:02:03 INFO - Found by: stack scanning
Interesting that we're seeing this on b2g18 too. Rob, your patches for bug 876426 and bug 876380 came up as possibly suspicious yesterday when looking at the regression range. Any chance you can take a look?
It looks like we crash here: mTimer = do_CreateInstance("@mozilla.org/timer;1"); mTimer->InitWithFuncCallback(TimerCallback, this, timeout, nsITimer::TYPE_ONE_SHOT); on the call to InitFuncWithCallback, with mTimer null. How can this be null? I can only assume out of memory? But that doesn't make sense, this isn't a particularly large allocation and we should be crashing all over the place if mochitest-1 is low on memory.
do_CreateInstance fails after xpcom-shutdown
Andrea/Ehsan patched this with a null check in bug 877638.
Fixed by bug 877638.
Assignee: nobody → amarchesini
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: — → FIXED
Target Milestone: — → mozilla24
You need to log in
before you can comment on or make changes to this bug.
As it turns out, upon opening up a command prompt window, the “Process exited with code 1” error message is shown. In addition to that, there’s no prompt so users cannot use the command prompt at all. This problem usually comes up when you have Anaconda installed on your system which comes with its own Anaconda Prompt along with many other things. In this article, we are going to show you how to resolve the problem in question quite easily so just follow through with the given guidelines.
As it turns out, Anaconda is a famous toolkit for data science that mainly uses the Python and R languages. Since this is a toolkit, there are a number of different tools that come packed with Anaconda. While, normally, the command prompt is not used that much, there are still a lot of cases where it can be really helpful. Like we have mentioned above, the error message in question appears usually when you have installed Anaconda on your system and there is quite an easy remedy to the problem at hand. Thus, without any further ado, let us get started and show you how to resolve the “Process exited with code 1” error message.
Delete Command Processor AutoRun Key
In order to resolve the problem in question, you will have to delete a specific Windows Registry key. As it turns out, it is no surprise that Windows Registry is responsible for how your system behaves and operates. There exists a key inside Windows Registry for Command Processor which essentially refers to the command prompt called AutoRun.
The key is basically used for running a specific task or program automatically when the command prompt is launched. Thus, the name AutoRun. To fix the error message, you will have to get rid of the mentioned key.
Now, there are two ways you can achieve this, one is using a simple command that requires it to be entered in a Powershell window. We would recommend this if you are not versed with using or navigating the Windows Registry. Secondly, you can choose to remove the key manually by navigating to the respective path. We will be mentioning both ways so you can choose whichever suits you best.
Use Powershell
If you wish to go for the simpler approach, simply follow the instructions that are given down below:
- First of all, open up the Start Menu and search for Powershell. Right-click on it and from the drop-down menu, choose the Run as administrator option.
Opening up Powershell as an Administrator - Once the Powershell window is up, type in the following command or simply copy-paste it and then hit the Enter key:
C:WindowsSystem32reg.exe DELETE "HKCUSoftwareMicrosoftCommand Processor" /v AutoRun /f
Deleting AutonRun Key via Powershell - After doing that, go ahead and restart your computer.
- Once your PC boots up, try opening up a command prompt window to see if the error message still appears.
Manually Delete AutoRun Key
In case you are tech-savvy and wish to go with the manual approach, we would recommend that you create a backup of the Windows Registry before proceeding. This is important because any unwanted mistake can render your PC stuck or something of the sort. With that said, follow the instructions that are given down below to do this:
- First of all, open up the Run dialog box by pressing Windows key + R on your keyboard.
- In the Run dialog box, type in Regedit and then hit the Enter key.
Opening up Windows Registry - This will open up the Windows Registry window.
- In the address bar provided at the top, copy and paste the following path:
ComputerHKEY_CURRENT_USERSoftwareMicrosoftCommand Processor
Navigating to Command Processor Path in Windows Registry - Once you are there, on the right-hand side, right-click on the AutoRun key provided, and from the drop-down menu, choose the Delete option.
Deleting AutonRun Key - With that done, go ahead and perform a system restart.
- As your PC boots up, open up a command prompt window and see if the error message is still there.
Create a New User Account
Finally, if the above solution has not fixed the problem for you, then in such a case, you can try creating a new user account on your system. This has been reported by other users facing the same error message and who were able to circumvent the problem by creating a new user account. Once you have created a new user account, you can choose to transfer your data to the new user account.
Follow the instructions given down below to create a user account:
- First of all, open up the Windows Settings app by pressing Windows key + I on your keyboard.
Windows Settings - Then, on the Settings app, navigate to Accounts.
- On the Accounts page, click on the Family & other users option provided.
Accounts Settings - Once you are there, click on the Add account button provided in front of Add other user.
Adding New User Account - Follow the on-screen prompts to create a new user account.
Kamil Anwar
Kamil is a certified MCITP, CCNA (W), CCNA (S) and a former British Computer Society Member with over 9 years of experience Configuring, Deploying and Managing Switches, Firewalls and Domain Controllers also an old-school still active on FreeNode.
Содержание
- Php exit error codes
- Description
- Parameters
- Return Values
- Examples
- Notes
- See Also
- User Contributed Notes 21 notes
- exit — Выводит сообщение и прекращает выполнение текущего скрипта
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Примечания
- Смотрите также
- Php exit error codes
- Description
- User Contributed Notes 8 notes
- Php exit error codes
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Примечания
- Смотрите также
- Predefined Constants
- User Contributed Notes 20 notes
Php exit error codes
(PHP 4, PHP 5, PHP 7, PHP
exit — Output a message and terminate the current script
Description
Terminates execution of the script. Shutdown functions and object destructors will always be executed even if exit is called.
exit is a language construct and it can be called without parentheses if no status is passed.
Parameters
If status is a string, this function prints the status just before exiting.
If status is an int , that value will be used as the exit status and not printed. Exit statuses should be in the range 0 to 254, the exit status 255 is reserved by PHP and shall not be used. The status 0 is used to terminate the program successfully.
Return Values
No value is returned.
Examples
Example #1 exit example
= ‘/path/to/data-file’ ;
$file = fopen ( $filename , ‘r’ )
or exit( «unable to open file ( $filename )» );
Example #2 exit status example
//exit program normally
exit;
exit();
exit( 0 );
//exit with an error code
exit( 1 );
exit( 0376 ); //octal
Example #3 Shutdown functions and destructors run regardless
class Foo
<
public function __destruct ()
<
echo ‘Destruct: ‘ . __METHOD__ . ‘()’ . PHP_EOL ;
>
>
function shutdown ()
<
echo ‘Shutdown: ‘ . __FUNCTION__ . ‘()’ . PHP_EOL ;
>
$foo = new Foo ();
register_shutdown_function ( ‘shutdown’ );
exit();
echo ‘This will not be output.’ ;
?>
The above example will output:
Notes
Note: Because this is a language construct and not a function, it cannot be called using variable functions, or named arguments.
This language construct is equivalent to die() .
See Also
User Contributed Notes 21 notes
jbezorg at gmail proposed the following:
if( $_SERVER [ ‘SCRIPT_FILENAME’ ] == __FILE__ )
header ( ‘Location: /’ );
?>
After sending the `Location:’ header PHP _will_ continue parsing, and all code below the header() call will still be executed. So instead use:
if( $_SERVER [ ‘SCRIPT_FILENAME’ ] == __FILE__ )
<
header ( ‘Location: /’ );
exit;
>
If you want to avoid calling exit() in FastCGI as per the comments below, but really, positively want to exit cleanly from nested function call or include, consider doing it the Python way:
define an exception named `SystemExit’, throw it instead of calling exit() and catch it in index.php with an empty handler to finish script execution cleanly.
// file: index.php
class SystemExit extends Exception <>
try <
/* code code */
>
catch ( SystemExit $e ) < /* do nothing */ >
// end of file: index.php
// some deeply nested function or .php file
if ( SOME_EXIT_CONDITION )
throw new SystemExit (); // instead of exit()
A side-note for the use of exit with finally: if you exit somewhere in a try block, the finally won’t be executed. Could not sound obvious: for instance in Java you never issue an exit, at least a return in your controller; in PHP instead you could find yourself exiting from a controller method (e.g. in case you issue a redirect).
Here follows the POC:
echo «testing finally wit exitn» ;
try <
echo «In try, exitingn» ;
exit;
> catch( Exception $e ) <
echo «catchedn» ;
> finally <
echo «in finallyn» ;
>
echo «In the endn» ;
?>
This will print:
testing finally wit exit
In try, exiting
Beware if you enabled uopz extension, it disables exit / die() by default. They are just «skipped».
To rich dot lovely at klikzltd dot co dot uk:
Using a «@» before header() to suppress its error, and relying on the «headers already sent» error seems to me a very bad idea while building any serious website.
This is *not* a clean way to prevent a file from being called directly. At least this is not a secure method, as you rely on the presence of an exception sent by the parser at runtime.
I recommend using a more common way as defining a constant or assigning a variable with any value, and checking for its presence in the included script, like:
in index.php:
( ‘INDEX’ , true );
?>
in your included file:
if (! defined ( ‘INDEX’ )) <
die( ‘You cannot call this script directly !’ );
>
?>
BR.
When using php-fpm, fastcgi_finish_request() should be used instead of register_shutdown_function() and exit()
For example, under nginx and php-fpm 5.3+, this will make browsers wait 10 seconds to show output:
echo «You have to wait 10 seconds to see this.
» ;
register_shutdown_function ( ‘shutdown’ );
exit;
function shutdown () <
sleep ( 10 );
echo «Because exit() doesn’t terminate php-fpm calls immediately.
» ;
>
?>
This doesn’t:
echo «You can see this from the browser immediately.
» ;
fastcgi_finish_request ();
sleep ( 10 );
echo «You can’t see this form the browser.» ;
?>
In addition to «void a t informance d o t info», here’s a one-liner that requires no constant:
( $_SERVER [ ‘PHP_SELF’ ]) == basename ( __FILE__ ) && die( ‘Thou shall not pass!’ ); ?>
Placing it at the beginning of a PHP file will prevent direct access to the script.
To redirect to / instead of dying:
if ( basename ( $_SERVER [ ‘PHP_SELF’ ]) == basename ( __FILE__ )) <
if ( ob_get_contents ()) ob_clean (); // ob_get_contents() even works without active output buffering
header ( ‘Location: /’ );
die;
>
?>
Doing the same in a one-liner:
( $_SERVER [ ‘PHP_SELF’ ]) == basename ( __FILE__ ) && (! ob_get_contents () || ob_clean ()) && header ( ‘Location: /’ ) && die; ?>
A note to security: Even though $_SERVER[‘PHP_SELF’] comes from the user, it’s safe to assume its validity, as the «manipulation» takes place _before_ the actual file execution, meaning that the string _must_ have been valid enough to execute the file. Also, basename() is binary safe, so you can safely rely on this function.
Be noticed about uopz (User Operations for Zend) extension of PHP. It disables (prevents) halting of PHP scripts (both FPM and CLI) on calling `exit()` and `die()` by default just after enabling the extension. Therefore your script will continue to execute.
These are the standard error codes in Linux or UNIX.
1 — Catchall for general errors
2 — Misuse of shell builtins (according to Bash documentation)
126 — Command invoked cannot execute
127 — “command not found”
128 — Invalid argument to exit
128+n — Fatal error signal “n”
130 — Script terminated by Control-C
255* — Exit status out of range
Источник
exit — Выводит сообщение и прекращает выполнение текущего скрипта
(PHP 4, PHP 5, PHP 7)
exit — Выводит сообщение и прекращает выполнение текущего скрипта
Описание
Прекращает выполнение скрипта. Функции отключения и деструкторы объекта будут запущены даже если была вызвана конструкция exit.
exit — это конструкция языка, и она может быть вызвана без круглых скобок если не передается параметр status .
Список параметров
Если параметр status задан в виде строки, то эта функция выведет содержимое status перед выходом.
Если параметр status задан в виде целого числа ( integer ), то это значение будет использовано как статус выхода и не будет выведено. Статусы выхода должны быть в диапазоне от 0 до 254, статус выхода 255 зарезервирован PHP и не должен использоваться. Статус выхода 0 используется для успешного завершения программы.
Замечание: PHP >= 4.2.0 НЕ выведет параметр status если он задан как целое число ( integer ).
Возвращаемые значения
Эта функция не возвращает значения после выполнения.
Примеры
Пример #1 Пример использования exit
= ‘/path/to/data-file’ ;
$file = fopen ( $filename , ‘r’ )
or exit( «Невозможно открыть файл ( $filename )» );
Пример #2 Пример использования exit со статусом выхода
//нормальный выход из программы
exit;
exit();
exit( 0 );
//выход с кодом ошибки
exit( 1 );
exit( 0376 ); //восьмеричный
Пример #3 Функции выключения и деструкторы выполняются независимо
class Foo
<
public function __destruct ()
<
echo ‘Деинициализировать: ‘ . __METHOD__ . ‘()’ . PHP_EOL ;
>
>
function shutdown ()
<
echo ‘Завершить: ‘ . __FUNCTION__ . ‘()’ . PHP_EOL ;
>
$foo = new Foo ();
register_shutdown_function ( ‘shutdown’ );
exit();
echo ‘Эта строка не будет выведена.’ ;
?>
Результат выполнения данного примера:
Примечания
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.
Эта языковая конструкция эквивалентна функции die() .
Смотрите также
- register_shutdown_function() — Регистрирует функцию, которая выполнится по завершении работы скрипта
Источник
Php exit error codes
(PHP 4, PHP 5, PHP 7, PHP
die — Equivalent to exit
Description
This language construct is equivalent to exit() .
User Contributed Notes 8 notes
It is poor design to rely on die() for error handling in a web site because it results in an ugly experience for site users: a broken page and — if they’re lucky — an error message that is no help to them at all. As far as they are concerned, when the page breaks, the whole site might as well be broken.
If you ever want the public to use your site, always design it to handle errors in a way that will allow them to continue using it if possible. If it’s not possible and the site really is broken, make sure that you find out so that you can fix it. die() by itself won’t do either.
If a supermarket freezer breaks down, a customer who wanted to buy a tub of ice cream doesn’t expect to be kicked out of the building.
( $with_this ) or die ( ‘oops!’ );
?>
(in php, «die» is actually an alias of «exit»)
beware until this is often used as an error handling statement actually isn’t. is just the «or» boolean operator overloaded (short circuited)
it won’t supress any error message, won’t prevent you for fatal errors or crashes, is not an alias for «try/catch», and could has unpredictable results. it just means something like this:
— execute the first statement «»do_something($with_this)»» normally
— if the statement results TRUE: no need to execute the second statement so skip it
— else if returns FALSE. well i am not sure about the result of the whole expression, so continue with second statement «»die(‘cuack!)»»
so you can’t rely on all statements will suppress error messages or crashes, or will always return «false» on error or undesirable behavior.
for this better use the error skipping operator «@» «if» and «exit» commands, or use «try/catch» blocks
Beware that when using PHP on the command line, die(«Error») simply prints «Error» to STDOUT and terminates the program with a normal exit code of 0.
If you are looking to follow UNIX conventions for CLI programs, you may consider the following:
( STDERR , «An error occurred.n» );
exit( 1 ); // A response code other than 0 is a failure
?>
In this way, when you pipe STDOUT to a file, you may see error messages in the console and BASH scripts can test for a response code of 0 for success:
$ php die.php > test
An error occurred.
rc@adl-dev-01:
Ideally, PHP would write all Warnings, Fatal Errors, etc on STDERR, but that’s another story.
Источник
Php exit error codes
(PHP 4, PHP 5, PHP 7)
exit — Вывести сообщение и прекратить выполнение текущего скрипта
Описание
Прекращает выполнение скрипта. Функции отключения и деструкторы объекта будут запущены, даже если была вызвана конструкция exit .
exit — это конструкция языка, и она может быть вызвана без круглых скобок, если не передается параметр status .
Список параметров
Если status задан в виде строки, то эта функция выведет содержимое status перед выходом.
Если status задан в виде целого числа ( int ), то это значение будет использовано как статус выхода и не будет выведено. Статусы выхода должны быть в диапазоне от 0 до 254, статус выхода 255 зарезервирован PHP и не должен использоваться. Статус выхода 0 используется для успешного завершения программы.
Возвращаемые значения
Эта функция не возвращает значения после выполнения.
Примеры
Пример #1 Пример использования exit
= ‘/path/to/data-file’ ;
$file = fopen ( $filename , ‘r’ )
or exit( «Невозможно открыть файл ( $filename )» );
Пример #2 Пример использования exit со статусом выхода
//обычный выход из программы
exit;
exit();
exit( 0 );
//выход с кодом ошибки
exit( 1 );
exit( 0376 ); //восьмеричный
Пример #3 Функции выключения и деструкторы выполняются независимо
class Foo
<
public function __destruct ()
<
echo ‘Деинициализировать: ‘ . __METHOD__ . ‘()’ . PHP_EOL ;
>
>
function shutdown ()
<
echo ‘Завершить: ‘ . __FUNCTION__ . ‘()’ . PHP_EOL ;
>
$foo = new Foo ();
register_shutdown_function ( ‘shutdown’ );
exit();
echo ‘Эта строка не будет выведена.’ ;
?>
Результат выполнения данного примера:
Примечания
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.
Эта языковая конструкция эквивалентна функции die() , однако в отличие от неё соединение не объявляется закрытым.
Смотрите также
- register_shutdown_function() — Регистрирует функцию, которая выполнится при завершении работы скрипта
Источник
Predefined Constants
The constants below are always available as part of the PHP core.
Note: You may use these constant names in php.ini but not outside of PHP, like in httpd.conf , where you’d use the bitmask values instead.
Errors and Logging
Value | Constant | Description | Note |
---|---|---|---|
1 | E_ERROR ( int ) | Fatal run-time errors. These indicate errors that can not be recovered from, such as a memory allocation problem. Execution of the script is halted. | |
2 | E_WARNING ( int ) | Run-time warnings (non-fatal errors). Execution of the script is not halted. | |
4 | E_PARSE ( int ) | Compile-time parse errors. Parse errors should only be generated by the parser. | |
8 | E_NOTICE ( int ) | Run-time notices. Indicate that the script encountered something that could indicate an error, but could also happen in the normal course of running a script. | |
16 | E_CORE_ERROR ( int ) | Fatal errors that occur during PHP’s initial startup. This is like an E_ERROR , except it is generated by the core of PHP. | |
32 | E_CORE_WARNING ( int ) | Warnings (non-fatal errors) that occur during PHP’s initial startup. This is like an E_WARNING , except it is generated by the core of PHP. | |
64 | E_COMPILE_ERROR ( int ) | Fatal compile-time errors. This is like an E_ERROR , except it is generated by the Zend Scripting Engine. | |
128 | E_COMPILE_WARNING ( int ) | Compile-time warnings (non-fatal errors). This is like an E_WARNING , except it is generated by the Zend Scripting Engine. | |
256 | E_USER_ERROR ( int ) | User-generated error message. This is like an E_ERROR , except it is generated in PHP code by using the PHP function trigger_error() . | |
512 | E_USER_WARNING ( int ) | User-generated warning message. This is like an E_WARNING , except it is generated in PHP code by using the PHP function trigger_error() . | |
1024 | E_USER_NOTICE ( int ) | User-generated notice message. This is like an E_NOTICE , except it is generated in PHP code by using the PHP function trigger_error() . | |
2048 | E_STRICT ( int ) | Enable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code. | |
4096 | E_RECOVERABLE_ERROR ( int ) | Catchable fatal error. It indicates that a probably dangerous error occurred, but did not leave the Engine in an unstable state. If the error is not caught by a user defined handle (see also set_error_handler() ), the application aborts as it was an E_ERROR . | |
8192 | E_DEPRECATED ( int ) | Run-time notices. Enable this to receive warnings about code that will not work in future versions. | |
16384 | E_USER_DEPRECATED ( int ) | User-generated warning message. This is like an E_DEPRECATED , except it is generated in PHP code by using the PHP function trigger_error() . | |
32767 | E_ALL ( int ) | All errors, warnings, and notices. |
The above values (either numerical or symbolic) are used to build up a bitmask that specifies which errors to report. You can use the bitwise operators to combine these values or mask out certain types of errors. Note that only ‘|’, ‘
‘, ‘!’, ‘^’ and ‘&’ will be understood within php.ini .
User Contributed Notes 20 notes
[Editor’s note: fixed E_COMPILE_* cases that incorrectly returned E_CORE_* strings. Thanks josiebgoode.]
The following code expands on Vlad’s code to show all the flags that are set. if not set, a blank line shows.
= error_reporting ();
for ( $i = 0 ; $i 15 ; $i ++ ) <
print FriendlyErrorType ( $errLvl & pow ( 2 , $i )) . «
\n» ;
>
function FriendlyErrorType ( $type )
<
switch( $type )
<
case E_ERROR : // 1 //
return ‘E_ERROR’ ;
case E_WARNING : // 2 //
return ‘E_WARNING’ ;
case E_PARSE : // 4 //
return ‘E_PARSE’ ;
case E_NOTICE : // 8 //
return ‘E_NOTICE’ ;
case E_CORE_ERROR : // 16 //
return ‘E_CORE_ERROR’ ;
case E_CORE_WARNING : // 32 //
return ‘E_CORE_WARNING’ ;
case E_COMPILE_ERROR : // 64 //
return ‘E_COMPILE_ERROR’ ;
case E_COMPILE_WARNING : // 128 //
return ‘E_COMPILE_WARNING’ ;
case E_USER_ERROR : // 256 //
return ‘E_USER_ERROR’ ;
case E_USER_WARNING : // 512 //
return ‘E_USER_WARNING’ ;
case E_USER_NOTICE : // 1024 //
return ‘E_USER_NOTICE’ ;
case E_STRICT : // 2048 //
return ‘E_STRICT’ ;
case E_RECOVERABLE_ERROR : // 4096 //
return ‘E_RECOVERABLE_ERROR’ ;
case E_DEPRECATED : // 8192 //
return ‘E_DEPRECATED’ ;
case E_USER_DEPRECATED : // 16384 //
return ‘E_USER_DEPRECATED’ ;
>
return «» ;
>
?>
-1 is also semantically meaningless as a bit field, and only works in 2s-complement numeric representations. On a 1s-complement system -1 would not set E_ERROR. On a sign-magnitude system -1 would set nothing at all! (see e.g. http://en.wikipedia.org/wiki/Ones%27_complement)
If you want to set all bits,
0 is the correct way to do it.
But setting undefined bits could result in undefined behaviour and that means *absolutely anything* could happen 🙂
A simple and neat way to get the error level from the error code. You can even customize the error level names further.
= [
E_ERROR => «E_ERROR» ,
E_WARNING => «E_WARNING» ,
E_PARSE => «E_PARSE» ,
E_NOTICE => «E_NOTICE» ,
E_CORE_ERROR => «E_CORE_ERROR» ,
E_CORE_WARNING => «E_CORE_WARNING» ,
E_COMPILE_ERROR => «E_COMPILE_ERROR» ,
E_COMPILE_WARNING => «E_COMPILE_WARNING» ,
E_USER_ERROR => «E_USER_ERROR» ,
E_USER_WARNING => «E_USER_WARNING» ,
E_USER_NOTICE => «E_USER_NOTICE» ,
E_STRICT => «E_STRICT» ,
E_RECOVERABLE_ERROR => «E_RECOVERABLE_ERROR» ,
E_DEPRECATED => «E_DEPRECATED» ,
E_USER_DEPRECATED => «E_USER_DEPRECATED» ,
E_ALL => «E_ALL»
];
echo $exceptions [ «1» ];
$code = 256 ;
echo $exceptions [ $code ];
?>
Output:
E_ERROR
E_USER_ERROR
This will need updating when PHP updates the error level names. Otherwise, it works just fine.
An other way to get all PHP errors that are set to be reported. This code will even work, when additional error types are added in future.
= 0 ;
foreach ( array_reverse ( str_split ( decbin ( error_reporting ()))) as $bit ) <
if ( $bit == 1 ) <
echo array_search ( pow ( 2 , $pot ), get_defined_constants ( true )[ ‘Core’ ]). «
n» ;
>
$pot ++;
>
?>
A neat way to have a place in code to control error reporting configuration 🙂
= [
E_ERROR => FALSE ,
E_WARNING => TRUE ,
E_PARSE => TRUE ,
E_NOTICE => TRUE ,
E_CORE_ERROR => FALSE ,
E_CORE_WARNING => FALSE ,
E_COMPILE_ERROR => FALSE ,
E_COMPILE_WARNING => FALSE ,
E_USER_ERROR => TRUE ,
E_USER_WARNING => TRUE ,
E_USER_NOTICE => TRUE ,
E_STRICT => FALSE ,
E_RECOVERABLE_ERROR => TRUE ,
E_DEPRECATED => FALSE ,
E_USER_DEPRECATED => TRUE ,
E_ALL => FALSE ,
];
error_reporting (
array_sum (
array_keys ( $errorsActive , $search = true )
)
);
super simple error code to human readable conversion:
function prettycode($code) <
return $code == 0 ? «FATAL» : array_search($code, get_defined_constants(true)[‘Core’]);
>
Notes posted above limited to current errors level as on 26th Aug 2016, following snippet will work even on introduction of new error level
$errLvl = error_reporting();
for ( $i = 1; $i
As for me, the best way to get error name by int value is that. And it’s works fine for me 😉
( array_slice ( get_defined_constants ( true )[ ‘Core’ ], 1 , 15 , true ))[ $type ];
//the same in readable form
array_flip (
array_slice (
get_defined_constants ( true )[ ‘Core’ ],
1 ,
15 ,
true
)
)[ $type ]
A shorter version of vladvarna’s FriendlyErrorType($type)
function getErrorTypeByValue ( $type ) <
$constants = get_defined_constants ( true );
foreach ( $constants [ ‘Core’ ] as $key => $value ) < // Each Core constant
if ( preg_match ( ‘/^E_/’ , $key ) ) < // Check error constants
if ( $type == $value )
return( » $key = $value » );
>
>
> // getErrorTypeByValue()
echo «[» . getErrorTypeByValue ( 1 ) . «]» . PHP_EOL ;
echo «[» . getErrorTypeByValue ( 0 ) . «]» . PHP_EOL ;
echo «[» . getErrorTypeByValue ( 8 ) . «]» . PHP_EOL ;
?>
Will give
[E_ERROR=1]
[]
[E_NOTICE=8]
My version!
For long list function returns for example «E_ALL without E_DEPRECATED «
function errorLevel()
<
$levels = array(
‘E_ERROR’,
‘E_WARNING’,
‘E_PARSE’,
‘E_NOTICE’,
‘E_CORE_ERROR’,
‘E_CORE_WARNING’,
‘E_COMPILE_ERROR’,
‘E_COMPILE_WARNING’,
‘E_USER_ERROR’,
‘E_USER_WARNING’,
‘E_USER_NOTICE’,
‘E_STRICT’,
‘E_RECOVERABLE_ERROR’,
‘E_DEPRECATED’,
‘E_USER_DEPRECATED’,
‘E_ALL’
);
$excluded = $included = array();
$errLvl = error_reporting();
foreach ($levels as $lvl) <
$val = constant($lvl);
if ($errLvl & $val) <
$included []= $lvl;
> else <
$excluded []= $lvl;
>
>
if (count($excluded) > count($included)) <
echo ‘
Consist: ‘.implode(‘,’, $included);
> else <
echo ‘
Consist: E_ALL without ‘.implode(‘,’, $excluded);
>
>
Well, technically -1 will show all errors which includes any new ones included by PHP. My guess is that E_ALL will always include new error constants so I usually prefer:
( E_ALL | E_STRICT );
?>
Reason being: With a quick glance anyone can tell you what errors are reported. -1 might be a bit more cryptic to newer programmers.
this would give you all the reported exception list of your configuration.
Источник