Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Wolverine X Sabretooth
Por jlojunior
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Bruno Gola em 25/10/2006    [ 4688 hits ]

Login: brunogola, 20352 pontos

   


Descrição

Este script serve como exemplo de como criar um programa que execute uma determinada função em background, ou seja, funcione como um daemon.

Neste exemplo ele roda um servidor que fica esperando por conexões remotas via socket.

[ Download: background.py ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

#!/usr/bin/python
# -*- coding: iso8859-1 -*-

"""
Este script serve para como podemos criar um processo que execute em background usando a syscall fork, que cria um processo identico ao que esta sendo executado, ou seja faz uma cópia do processo que chamou fork, o processo criado é o famoso processo filho. fork retorna o PID do filho para o processo que o chamou (processo pai) e 0 para o que acabou de criar (filho), para que assim você saiba se esta trabalhando com o pai ou o filho.

Este exemplo cria um servidor simples que aguarda uma conexão e recebe mensagens vindas de um cliente, as mensagens são gravadas no arquivo passado como argumento.

Exemplo:

$ ./background.py arquivo.log 9099
Processo executado em background, PID = 2825

Para ter ajuda basta digitar ./background.py -h

Bruno Gola < brunogola em gmail ponto com >
"""

""" Módulo necessário para utilização de sockets"""
from socket import *

""" Módulos para receber argumentos via linha de comando e sair do programa (exit) """
from sys import argv,exit

""" Módulo para criar processos filhos (syscall fork())"""
from os import fork


def server():
    """ Esta função abre um servidor que fica esperando por conexões de rede na porta definida. """
    NUMERO_CONEXOES = 1 # Número de conexões que o server aceitara

    if len(argv) < 3:
        usage()
        exit(1)

    sock = socket(AF_INET,SOCK_STREAM)  #   Criação do socket do servidor
    sock.bind(("localhost",int(argv[2])))   #   Faz o socket escutar no ip "localhost" e porta passado no argumento
    sock.listen(NUMERO_CONEXOES)    #   Escuta até NUMERO_CONEXOES conexões
    client = sock.accept()  #   Aceita e espera por conexões
    new_sock = client[0]    #   client[0] contém o socket para a conexão aberta,
    ip = client[1][0] # client[1] contém uma tupla com informações sobre o client no formato (ip,porta)
    file.write("Cliente conectado.\nInformações:\n\tIP: %s\n" % ip)
    file.flush()
    file.write("\nO Server está de pé, esperando por mensagens. \n\n")
    file.flush()
    BY = 1024
    try:
        msg = ""
        while msg != "{FONTE}":
            msg = new_sock.recv(BY)   #   Recebe uma mensagem pelo socket aberto, recebe até BY bytes
            file.write("Mensagem recebida de %s -> %s\n" % (ip,msg))
            file.flush()
        file.write("Cliente %s desconectado.\nFechando o servidor." % ip)
        file.flush()
    except KeyboardInterrupt:   #   Trata o CTRL+C
        file.close()
        print "Saindo..."
        exit(0)

def usage():
    print "Uso: %s options [arquivo log] [porta]\n\n\t-h mostra esta mensagem de ajuda." % argv[0]


if __name__ == "__main__":
    args = ("-h")
    if len(argv) < 2 or argv[1] == "-h":
        usage()
        exit(1)

    try:

        file = open(argv[1],'w')
    except:
        print "Sem permissão de escrita no arquivo %s" % argv[1]
        exit(1)

    pid = fork()   #    cria uma cópia do processo (cria o filho), retorna 0 para o filho e o PID do filho para o pai
    if pid: #   se pid != 0, ou seja, se pid, isso significa que estamos com o pai e "pid" contém o pid do filho
        print "Processo executado em background, PID = %d" % pid
        exit(0)# o pai envia a mensagem para o usuário e sai, ja o filho que não passou pelo if anterior continua a execução
    server()    # O filho executa o servidor, ja em background.
    exit(0)

Scripts recomendados
   Script Linux recomendado Script para Away com varias funções para xchat.
   Script Linux recomendado Algoritmo de Abraao
   Script Linux recomendado QFacil 0.2 - Qemu simplificado.
   Script Linux recomendado Coquetel
   Script Linux recomendado Versão das principais distribuições.

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.