1e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project/* 2e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * 4e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * you may not use this file except in compliance with the License. 6e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * You may obtain a copy of the License at 7e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * 8e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * 10e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * See the License for the specific language governing permissions and 14e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * limitations under the License. 15e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * 16e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * Simple cpu eater busy loop. Runs as a daemon. prints the child PID to 17e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * std so you can easily kill it later. 18e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project */ 19e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 20e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <stdio.h> 21e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <unistd.h> 22e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <stdlib.h> 23e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <fcntl.h> 24e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <sys/types.h> 25e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <sys/stat.h> 26e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 27e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 28e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectint main(int argc, char *argv[]) 29e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 30e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project pid_t pid; 31e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int life_universe_and_everything; 32e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int fd; 33e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 34e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project switch(fork()) { 35e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project case -1: 36e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project perror(argv[0]); 37e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project exit(1); 38e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project break; 39e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project case 0: /* child */ 40e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project chdir("/"); 41e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project umask(0); 42e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project setpgrp(); 43e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project setsid(); 44e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project /* fork again to fully detach from controlling terminal. */ 45e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project switch(pid = fork()) { 46e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project case -1: 47e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project break; 48e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project case 0: /* second child */ 49e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project /* redirect to /dev/null */ 50e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project close(0); 51e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project open("/dev/null", 0); 52e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project close(1); 53e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(open("/dev/null", O_WRONLY) < 0) { 54e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project perror("/dev/null"); 55e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project exit(1); 56e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 57e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fflush(stdout); 58e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project close(2); 59e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project dup(1); 60e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (fd = 3; fd < 256; fd++) { 61e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project close(fd); 62e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 63e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project /* busy looper */ 64e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project while (1) { 65e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project life_universe_and_everything = 42 * 2; 66e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 67e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project default: 68e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project /* so caller can easily kill it later. */ 69e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("%d\n", pid); 70e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project exit(0); 71e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project break; 72e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 73e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project break; 74e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project default: 75e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project exit(0); 76e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project break; 77e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 78e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return 0; 79e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 80e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 81e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 82e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project/* vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab */ 83e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 84