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